Python中是否有任何库将数据编码为位图模式并将图像解码为数据,如Piet语言?
Piet的Hello World
更新
我想获取一个字符串,比如 Hello,world 或一个URL并将其编码为图像,然后读取此图像并解码为字符串。像QR码,但使用位图。
答案 0 :(得分:2)
您需要说明在用作图像时如何表示数据。 这比执行编码的现有代码要重要得多。
在Piet Language的情况下,正是发生了什么 - 这是"语言规范"。从那以后,人们确实构建了itnerpreters和工具(用各种其他语言,包括Python interpreter)。
但是如果你想将任意数据编码为图像,然后将其解码回来,首先要说明你想如何编码它。最直接的方法是每个数据字节是一个像素的颜色通道,以及确定编码数据的确切长度,并填充最底部图像行的方法。
使用Python Imaging Library(Pillow)的Image.frombytes
方法可以直接使用它 - 虽然它几乎不会产生令人愉悦的图像。
还可以构建一个Python程序来编译Piet程序,该程序只会溢出"给定输入数据,给定任意数据 - 然后,上面的piet解释器可以解码数据。
示例下面将包含一个.wav声音文件(我只是在Python控制台上执行此操作)作为彩色图像,预先挂起4个字节用于数据长度,并用黑色填充底部像素。
import struct
from PIL import Image
data = open("2600PacManDies.wav", "rb").read()
size = struct.pack("<I", len(data))
image_side = int(((len(data) + len(size)) / 3.0) ** 0.5) + 1
img = Image.frombytes("RGB", (image_side, image_side) , size + data + b"\x00" * (image_side ** 2 * 3 - (len(size) + len(data)) ) )
img.save("2600_pacman_dies.png")
(虽然我已经使用了原始声音数据文件,但人们甚至可以在数据中发现一些看图像的模式 - 黑色条纹意味着静音时刻最明显)
答案 1 :(得分:0)
根据您对image manipulation
或image processing
的规划,Python图片库PIL可能就是您要找的。 p>
演示代码
from PIL import Image
from PIL import ImageFilter
i = Image.open("gImage1.jpg")
im2 = i.filter(ImageFilter.EMBOSS)
im3 = i.filter(ImageFilter.FIND_EDGES)
im2.save("gImage1_EMBOSS.jpg")
im3.save("gImage1_FIND_EDGES.jpg")
输入图片