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

使用Python将字符串编码为图像,python,python-2.7,python-3.x,image-processing,piet,Python,Python 2.7,Python 3.x,Image Processing,Piet,Python中有没有像语言一样,将数据编码为位图模式,将图像解码为数据的库 与皮特一起向世界问好 更新 我想得到一个字符串,比如Hello、world或URL,并将其编码为图像,然后读取此图像并解码为字符串。类似于二维码,但使用位图。您需要说明数据在用作图像时的表示方式。 这远比编码的现有代码更重要 在这个例子中,这正是发生的事情——这就是“语言规范”。人们确实利用它构建了iTnerPreter和工具(使用多种其他语言,包括a语言) 但是如果你想把任意数据编码成一幅图像,然后再把它解码回来,你

Python中有没有像语言一样,将数据编码为位图模式,将图像解码为数据的库

与皮特一起向世界问好

更新


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

您需要说明数据在用作图像时的表示方式。 这远比编码的现有代码更重要

在这个例子中,这正是发生的事情——这就是“语言规范”。人们确实利用它构建了iTnerPreter和工具(使用多种其他语言,包括a语言)

但是如果你想把任意数据编码成一幅图像,然后再把它解码回来,你首先要说明你想如何编码它。最直接的方法是,数据的每个字节都是一个像素的颜色通道,确定编码数据的确切长度,并填充最底部的图像行

这对于PythonImaging 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")
导入结构
从PIL导入图像
数据=打开(“2600PacManDies.wav”,“rb”).read()

size=struct.pack(“您需要一个数据作为图像使用时如何表示的规范。 这远比编码的现有代码更重要

在的例子中,这正是发生的事情——这就是“语言规范”。人们从中构建了ITnerPreter和工具(使用多种其他语言,包括a)

但是,如果你想将任意数据编码到一幅图像中,然后将其解码回来,你首先必须说明你想如何对其进行编码。最简单的方法是,数据的每个字节都是一个像素的颜色通道,确定编码数据的确切长度,并填充最底部的图像行

这对于PythonImaging 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")
导入结构
从PIL导入图像
数据=打开(“2600PacManDies.wav”,“rb”).read()

size=struct.pack(“取决于您对
图像处理
图像处理
的计划,Python图像库可能就是您要寻找的

下面是一个演示代码,它应用了从 有许多其他的图像处理和像素操作工具,可在

演示代码

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")
输入图像

输出图像


根据您对
图像处理
图像处理
的计划,Python图像库可能是您需要的

下面是一个演示代码,它应用了从 有许多其他的图像处理和像素操作工具,可在

演示代码

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")
输入图像

输出图像


为什么要关闭此线程?Piet语言不会对图像中的数据进行编码。Piet程序的源代码是图像,Piet解释器可以执行Piet源图像。我关闭投票的原因可能是“不清楚你在问什么”。这个问题没有明确说明。这并没有阻止@jsbueno做出勇敢的尝试。看看。我想它正是你想要的。你为什么要关闭这个线程?Piet语言不在图像中编码数据。Piet程序的源代码是图像,Piet解释器可以执行Piet源图像。我的c落选的原因可能是“不清楚你在问什么”。这个问题没有明确说明。这并没有阻止@jsbueno做出勇敢的尝试。看一看。我认为它正是你想要的。我编辑了我的问题!是的,但尽管如此,在我尝试回答时,另一个答案并没有触及到你的实际问题。我编辑了我的问题!是的,但另一个答案确实如此当我试图回答时,不要触及你的实际问题。加载图像或应用过滤器的能力实际上是如何指导OP问题的?加载图像或应用过滤器的能力实际上是如何指导OP问题的?