原图图片Pjpg建立生成嵌入文字:abc作为隐藏水印的图片SP的数学模型使得图片SPjpg与原图P相近。生成图片的算法python 程序。和生成的图片中解析出信息的python 程序要求很好的鲁棒性
要实现将文字嵌入到图片中并生成相似的图片,可以使用图像处理中的隐写术技术。下面是一个基于Python的示例程序,使用LSB(最低有效位)方法将文字嵌入到图片中,并从嵌入的图片中提取出隐藏的水印信息。
from PIL import Image
def encode_text_to_image(original_image_path, secret_text, encoded_image_path):
original_image = Image.open(original_image_path)
width, height = original_image.size
secret_text += " " * (width * height - len(secret_text)) # 补齐隐藏信息的长度
secret_text_bin = ''.join(format(ord(char), '08b') for char in secret_text) # 将文字转换为二进制
secret_text_bin_index = 0
encoded_image = original_image.copy()
for y in range(height):
for x in range(width):
pixel = list(encoded_image.getpixel((x, y)))
for i in range(3):
if secret_text_bin_index < len(secret_text_bin):
pixel[i] = pixel[i] & 0xFE | int(secret_text_bin[secret_text_bin_index])
secret_text_bin_index += 1
encoded_image.putpixel((x, y), tuple(pixel))
encoded_image.save(encoded_image_path)
def decode_text_from_image(encoded_image_path):
encoded_image = Image.open(encoded_image_path)
width, height = encoded_image.size
secret_text_bin = ""
for y in range(height):
for x in range(width):
pixel = encoded_image.getpixel((x, y))
for i in range(3):
secret_text_bin += str(pixel[i] & 1)
secret_text = ""
for i in range(0, len(secret_text_bin), 8):
char_bin = secret_text_bin[i:i+8]
char = chr(int(char_bin, 2))
if char != " ":
secret_text += char
return secret_text
# 嵌入文字到图片
original_image_path = "P.jpg"
secret_text = "abc"
encoded_image_path = "SP.jpg"
encode_text_to_image(original_image_path, secret_text, encoded_image_path)
# 从嵌入的图片中提取隐藏的水印信息
decoded_text = decode_text_from_image(encoded_image_path)
print(decoded_text)
这个程序使用PIL库来处理图像。encode_text_to_image函数将原始图片中的每个像素的最低有效位替换为隐藏信息的二进制,生成嵌入了隐藏信息的图片。decode_text_from_image函数则从嵌入了隐藏信息的图片中提取出隐藏的水印信息。
请注意,这只是一个简单的示例,可能对于某些图片和隐藏信息的组合效果不佳。要提高鲁棒性,可以考虑使用更复杂的隐写术算法,例如利用像素值的微小变化来嵌入信息。
原文地址: https://www.cveoy.top/t/topic/ijwq 著作权归作者所有。请勿转载和采集!