Python 使用枕头创建隐写隐藏图像
我正在尝试学习如何创建一组这样的图像:。这个想法是有两个看似随机的图像,但当你对它们进行异或运算时,你会发现一条秘密信息。我想使用Python枕头,可能还需要一个简单的图像编辑器,比如paint.net。因此,我的问题由几个部分组成:Python 使用枕头创建隐写隐藏图像,python,image,pillow,Python,Image,Pillow,我正在尝试学习如何创建一组这样的图像:。这个想法是有两个看似随机的图像,但当你对它们进行异或运算时,你会发现一条秘密信息。我想使用Python枕头,可能还需要一个简单的图像编辑器,比如paint.net。因此,我的问题由几个部分组成: 我如何在枕头上生成一个充满随机黑白像素的图像 如何确保图像的某些区域不是随机的,而是相同的,确保异或比较将显示它们 创建这些图像的过程非常简单。下面是一个示例,说明如何做到这一点(不是最有效的): 创建两个大小相同的输出图像 创建一个相同大小的模板,其中1(白色)
创建这些图像的过程非常简单。下面是一个示例,说明如何做到这一点(不是最有效的):
- 如果当前位置的模板显示为0,则绘制两个随机数(0或1),并将它们指定给每个输出图像的当前像素
- 如果模板显示为1,则仅绘制一个随机数并将其分配给两个像素
x=random.randint(0,1)
(请参阅)要开始,这里有一种生成随机二进制图像的方法:
from PIL import Image
import numpy as np
# Make lots of ones and zeros.
data = np.random.randint(2, size=(100,100))
# Cast as 8-bit ints, 0 and 255.
data = data.astype(np.uint8) * 255
# Cast as an image. Pillow guesses mode.
img = Image.fromarray(data)
结果(放大到300×300像素):
为了未来的子孙后代,我做了以下几点: 首先,我制作了一个面具图像。它是一个白色背景,有一个红色框,框中有黑色文本。看起来像这样: 以下是我为制作两个模糊图像而编写的脚本:
from PIL import Image
import random
WHITE = (255, 255, 255, 255)
RED = (255, 0, 0, 255)
BLACK = (0, 0, 0, 255)
wb = [WHITE,BLACK]
rng = random.SystemRandom()
orig = Image.open('mask.png')
origData = list(orig.getdata())
n1 = Image.new(orig.mode, orig.size)
n2 = Image.new(orig.mode, orig.size)
n1data = []
n2data = []
for x in origData:
if x == WHITE:
n1data.append(rng.choice(wb))
n2data.append(rng.choice(wb))
elif x == RED:
y = bool(rng.getrandbits(1))
if y:
n1data.append(WHITE)
n2data.append(BLACK)
else:
n1data.append(BLACK)
n2data.append(WHITE)
elif x == BLACK:
y = bool(rng.getrandbits(1))
if y:
n1data.append(WHITE)
n2data.append(WHITE)
else:
n1data.append(BLACK)
n2data.append(BLACK)
n1.putdata(n1data)
n2.putdata(n2data)
n1.save('n1.png')
n2.save('n2.png')
orig.close()
n1.close()
n2.close()
结果是:
将它们异或在一起,得到以下结果:
XOR是一个对称过程,因此编码与解码是相同的。