python图片隐写_Python3 图片隐写术
时间: 2023-09-18 12:10:20 浏览: 225
Python3 中有多种实现图片隐写术的库,其中常用的有 stegano 和 pillow 等。
以下是使用 pillow 库实现图片隐写术的示例代码:
```python
from PIL import Image
def encode_image(image_path, message):
# 打开图片并将其转换为 RGB 模式
img = Image.open(image_path).convert('RGB')
pixels = img.load()
# 获取图片的宽和高
width, height = img.size
# 将待隐藏信息的二进制形式转换为字符串
binary_message = ''.join([format(ord(i), "08b") for i in message])
# 检查隐写信息的长度是否超过了图片的容量
if len(binary_message) > width * height:
raise ValueError("待隐藏信息过长")
# 开始隐写
index = 0
for row in range(height):
for col in range(width):
# 将每个像素的 RGB 值转换为二进制形式
r, g, b = pixels[col, row]
binary_r = format(r, "08b")
binary_g = format(g, "08b")
binary_b = format(b, "08b")
# 如果还有待隐藏的信息,则将其写入像素的最低有效位中
if index < len(binary_message):
pixels[col, row] = (
int(binary_r[:-1] + binary_message[index], 2),
int(binary_g[:-1] + binary_message[index+1], 2),
int(binary_b[:-1] + binary_message[index+2], 2)
)
index += 3
# 保存隐写后的图片
img.save("encoded_image.png")
def decode_image(image_path):
# 打开图片并将其转换为 RGB 模式
img = Image.open(image_path).convert('RGB')
pixels = img.load()
# 获取图片的宽和高
width, height = img.size
# 从图片中读取隐写信息
message = ""
for row in range(height):
for col in range(width):
r, g, b = pixels[col, row]
binary_r = format(r, "08b")
binary_g = format(g, "08b")
binary_b = format(b, "08b")
message += binary_r[-1] + binary_g[-1] + binary_b[-1]
# 将二进制信息转换为字符串
decoded_message = ""
for i in range(0, len(message), 8):
decoded_message += chr(int(message[i:i+8], 2))
return decoded_message
```
使用示例:
```python
# 隐写信息到图片中
encode_image("test.png", "Hello World!")
# 从图片中读取隐写信息
message = decode_image("encoded_image.png")
print(message) # 输出 "Hello World!"
```
注意:图片隐写术是一种敏感的技术,不应用于违法活动或侵犯他人隐私的行为。
阅读全文