【发布时间】:2017-09-11 01:44:02
【问题描述】:
我有一个脚本,它以十六进制列出图像中的所有像素数据。 PIL 或类似库是否有一种简单的方法可以从输出文本中重建图像?这是我用来获取数据的方法
#!/usr/bin/python
from PIL import Image
def rgb2hex(r, g, b):
return '#{:02x}{:02x}{:02x}'.format(r, g, b)
img = Image.open('apple_raw.png')
if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info):
pixels = img.convert('RGBA').load()
width, height = img.size
for x in range(width):
for y in range(height):
r, g, b, a = pixels[x, y]
print '%s,%s,%s' % (x, y, rgb2hex(r, g, b))
输出(剪辑)
0,0,#ffffff
0,1,#ffffff
0,2,#ffffff
0,3,#ffffff
0,4,#ffffff
...
...
304,308,#ffffff
304,309,#ffffff
304,310,#ffffff
304,311,#ffffff
304,312,#ffffff
304,313,#ffffff
http://imgur.com/a/5YT9H 我用于测试的图像
【问题讨论】:
-
图像大小为 305x314 写入图像时是否需要定义?任何在正确方向上的提示,文档等将不胜感激。我是图像处理新手
-
您可以使用类似的 for 循环代码从文本文件中重建图像。但是,这是您可以选择的保存和加载图像的最低效的方式。为什么不将图像保存为某种适当的图像格式?
-
@SvenMarnach 什么会更有效率?将像素放在平面阵列中?我需要所有的像素数据。我知道它效率不高,但它做了我需要它做的事情。我有一些包含此类数据的文本文件,我正在尝试从中重建图像。
-
那么您是从外部来源获取这种格式的图像吗?鉴于您展示了以这种格式存储图像的代码,我假设您正在自己生成文件。如果你控制存储图像的代码,你应该只使用一些图像格式,比如 PNG。它将使用 20 倍的存储空间,并且加载速度将提高数百倍。如果您不控制图像的来源,则必须执行以下答案中的操作或类似操作。
-
您可以使用
img.save("img.png")将图像保存为PNG,然后使用img = Image.load("img.png")再次加载它,这比您所做的更容易和更快。这是我建议你做的。