lsb嵌入水印python
时间: 2024-04-10 07:25:13 浏览: 130
LSB(Least Significant Bit)嵌入水印是一种常见的数字图像水印技术,它通过修改图像像素的最低有效位来隐藏水印信息。在Python中,可以使用PIL库(Python Imaging Library)来实现LSB嵌入水印。
以下是一个简单的LSB嵌入水印的Python代码示例:
```python
from PIL import Image
def embed_watermark(image_path, watermark_text, output_path):
# 打开原始图像
image = Image.open(image_path)
width, height = image.size
# 将水印文本转换为二进制
watermark_binary = ''.join(format(ord(c), '08b') for c in watermark_text)
# 检查水印文本长度是否超过图像容量
if len(watermark_binary) > width * height:
raise ValueError("Watermark text is too long for the image")
# 遍历图像像素并嵌入水印
watermark_index = 0
for y in range(height):
for x in range(width):
pixel = list(image.getpixel((x, y)))
for i in range(3): # 处理RGB三个通道
if watermark_index < len(watermark_binary):
# 修改最低有效位
pixel[i] = (pixel[i] & 0xFE) | int(watermark_binary[watermark_index])
watermark_index += 1
image.putpixel((x, y), tuple(pixel))
# 保存带有水印的图像
image.save(output_path)
# 示例用法
image_path = "original_image.jpg"
watermark_text = "This is a watermark"
output_path = "watermarked_image.jpg"
embed_watermark(image_path, watermark_text, output_path)
```
上述代码中,`embed_watermark`函数接受原始图像路径、水印文本和输出路径作为参数。它首先打开原始图像,然后将水印文本转换为二进制形式。接下来,它遍历图像的每个像素,并在RGB三个通道的最低有效位中嵌入水印信息。最后,保存带有水印的图像到指定的输出路径。
阅读全文