给我两个代码,要求如下1. 开发hide.py:把文本文件的内容隐藏到24位BMP图片中,修改后的图片和原图片相比,不能有明显的视觉差异 2. 开发show.py:从修改后的BMP图片中恢复文本文件的内容,恢复的文本内容应与原文本内容完全相同
时间: 2023-06-25 17:06:25 浏览: 236
Python-Python隐写工具用来在图像中隐藏图像或文本
hide.py:
```python
from PIL import Image
def hide_text_in_image(file_path, text):
img = Image.open(file_path)
# 检查图片是否大于文本
pixel_count = img.width * img.height
char_count = len(text)
if char_count * 8 > pixel_count:
raise Exception("文本太大,无法隐藏到图片中")
# 转换文本为二进制
binary_text = ''.join(format(ord(c), '08b') for c in text)
# 遍历每个像素点,把文本隐藏进去
binary_text_index = 0
pixels = list(img.getdata())
for i, pixel in enumerate(pixels):
# 把每个像素点的 RGB 值转换为二进制
r, g, b = format(pixel[0], '08b'), format(pixel[1], '08b'), format(pixel[2], '08b')
# 把文本隐藏进去
if binary_text_index < len(binary_text):
r = r[:-1] + binary_text[binary_text_index]
binary_text_index += 1
if binary_text_index < len(binary_text):
g = g[:-1] + binary_text[binary_text_index]
binary_text_index += 1
if binary_text_index < len(binary_text):
b = b[:-1] + binary_text[binary_text_index]
binary_text_index += 1
# 把修改后的 RGB 值写回去
pixels[i] = (int(r, 2), int(g, 2), int(b, 2))
# 把修改后的像素点写回图片
img.putdata(pixels)
img.save(file_path.replace('.bmp', '_hidden.bmp'))
```
show.py:
```python
from PIL import Image
def show_text_in_image(file_path):
img = Image.open(file_path)
# 遍历每个像素点,把隐藏的文本提取出来
binary_text = ''
pixels = list(img.getdata())
for pixel in pixels:
# 把每个像素点的 RGB 值转换为二进制
r, g, b = format(pixel[0], '08b'), format(pixel[1], '08b'), format(pixel[2], '08b')
# 把每个像素点的最后一位拼接起来,得到隐藏的文本
binary_text += r[-1] + g[-1] + b[-1]
# 把二进制文本转换为字符串
text = ''
for i in range(len(binary_text) // 8):
text += chr(int(binary_text[i*8:(i+1)*8], 2))
return text
```
使用方法:
```python
# 把文本隐藏到图片中
hide_text_in_image('example.bmp', 'Hello, world!')
# 从隐藏了文本的图片中提取出文本
text = show_text_in_image('example_hidden.bmp')
print(text) # 输出:Hello, world!
```
阅读全文