【问题标题】:Convert Image to array and array to image using python, does the array contain metadata or other info?使用python将图像转换为数组并将数组转换为图像,数组是否包含元数据或其他信息?
【发布时间】:2023-02-04 22:48:20
【问题描述】:

对不起我的英语,但这不是我的母语。

我想创建一个程序:

  • 将 jpeg 或 png 图像转换为数组(非常重要:我想要一个仅由图像像素具有的值组成的数组,而不是元数据或其他信息。我可以在其中选择图像的每个特定像素).
  • 将此数组保存在 txt 文件中。
  • 将仅由图像像素值组成的数组转换回 jpg 或 png 图像并将其保存在文件中。

要求:

  • 我用我写的程序创建的数组是否只由图像的像素值组成?还有元数据或其他信息吗?
  • 这是从图像中删除元数据的有效方法吗?
  • 这是创建逐像素表示该图像的数组的有效方法吗?
  • 这是将 png 图像转换为 jpeg 或将 jpeg 图像转换为 png 的有效方法吗?

谢谢你!

这是我创建的程序,有什么意见吗?

import numpy as np
from PIL import Image
import sys

img_data = Image.open("imagea.jpeg")
img_arr = np.array(img_data)
np.set_printoptions(threshold=sys.maxsize)

print(img_arr.shape)

new_img = Image.fromarray(img_arr)
new_img.save("imageb.jpeg")

print("Image saved!")

file = open("file1.txt", "w+")
content = str(img_arr)
file.write(content)
file.close()

print("Finished!")

【问题讨论】:

  • 您的想法是在不保留元数据的情况下将 jp(e)g 转换为 png?所以是的,因为无论如何使用img.save('your_name.png', 'PNG') PIL 方法都不会发生这种情况。

标签: python arrays image-processing metadata


【解决方案1】:

加载图像并将其转换为 Numpy 数组是丢弃所有元数据的一种完全合法的方式,包括:

  • EXIF数据,版权数据,
  • IPTC 和 XMP 数据,
  • ICC 颜色配置文件数据

你可以通过考虑你持有的 Numpy 数组及其维度和数据类型来判断它已经消失了。


请注意,您需要小心使用 PNG palette 图像和带有 alpha 通道的图像。


请注意,您可以在命令行上更简单地实现此目的ImageMagick使用:

magick mogrify -strip IMAGE.JPG

或者使用exiftool


请注意,您可以通过使用不支持元数据的格式来实现此目的,例如NetPBM,扩展名为.ppm,例如:

magick INPUT.JPG -strip -compress none RESULT.PPM    # gives P3/plain ASCII file
magick INPUT.JPG -strip RESULT.PPM  # gives P6/binary file

您还可以读取/写入 PPM 文件太平船务.

【讨论】:

    猜你喜欢
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多