0

Python中是否有任何库可以将数据编码为位图模式并将图像解码为数据,例如Piet语言?

你好世界与皮特

你好世界与皮特

更新

我想获取一个字符串,如Hello、world或 URL 并将其编码为图像,然后读取此图像并解码为字符串。类似于 QR 码,但使用位图。

4

2 回答 2

3

您需要指定数据在用作图像时的表示方式。这比进行编码的现有代码要重要得多。

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")

在此处输入图像描述

(虽然我使用的是原始声音数据文件,但在查看图像时甚至可以发现数据中的一些模式——黑色条纹意味着无声时刻最明显)

于 2016-03-30T20:28:06.587 回答
0

根据您的计划image manipulationimage 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")

输入图像

输入图像

输出图像
浮雕过滤器

查找边缘过滤器

于 2016-03-30T21:02:28.750 回答