使用Python将字符串编码为图像

时间:2016-03-30 19:37:29

标签: python python-2.7 python-3.x image-processing piet

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

Piet的Hello World

Hello World with Piet

更新

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

2 个答案:

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

enter image description here

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

答案 1 :(得分:0)

根据您对image manipulationimage processing的规划,Python图片库PIL可能就是您要找的。

以下是应用内置过滤器的演示代码,源自here 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")

输入图片

Input Image

输出图片
EMBOSS Filter

FIND EDGES FILTER