Python中是否有任何库可以将数据编码为位图模式并将图像解码为数据,例如Piet语言?
你好世界与皮特
更新
我想获取一个字符串,如Hello、world或 URL 并将其编码为图像,然后读取此图像并解码为字符串。类似于 QR 码,但使用位图。
Python中是否有任何库可以将数据编码为位图模式并将图像解码为数据,例如Piet语言?
你好世界与皮特
更新
我想获取一个字符串,如Hello、world或 URL 并将其编码为图像,然后读取此图像并解码为字符串。类似于 QR 码,但使用位图。
您需要指定数据在用作图像时的表示方式。这比进行编码的现有代码要重要得多。
在Piet Language的情况下,这正是发生的情况——这就是“语言规范”。人们确实从它构建了 itnerpreters 和工具(使用各种其他语言,包括Python 解释器)。
但是,如果您想将任意数据编码为图像,然后将其解码回来,您首先必须说明您想如何对其进行编码。最直接的方法是每个数据字节是一个像素的颜色通道,以及确定编码数据的确切长度并填充最底部图像行的方法。
使用 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")
(虽然我使用的是原始声音数据文件,但在查看图像时甚至可以发现数据中的一些模式——黑色条纹意味着无声时刻最明显)
根据您的计划image manipulation
或image processing
,Python 图像库PIL可能是您正在寻找的。
下面是一个应用内置过滤器的演示代码,源自这里PIL 中提供了许多其他图像处理和像素操作工具
演示代码
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")
输入图像