Qwen-Image-2512实战教程:为生成图添加版权水印与EXIF元数据的后处理脚本
·
Qwen-Image-2512实战教程:为生成图添加版权水印与EXIF元数据的后处理脚本
1. 为什么需要后处理脚本
当你用Qwen-Image-2512生成精美的图片后,可能会遇到这样的问题:图片分享出去后,别人不知道这是AI生成的,或者不知道创作者是谁。更实际的是,如果你用这些图片进行商业创作,没有版权信息很容易引发纠纷。
这就是后处理脚本的价值所在——它能在图片生成后自动添加两大关键信息:
- 版权水印:在图片角落添加半透明的创作者信息,既不影响美观又能声明版权
- EXIF元数据:在图片文件内部嵌入创作者、生成时间、使用模型等信息
想象一下,你为客户生成了一套产品概念图,每张图片都自动带有你的工作室名称和生成时间戳,看起来专业又省心。
2. 环境准备与脚本部署
2.1 安装所需库
首先确保你的Python环境中有这些基础库:
pip install Pillow piexif
- Pillow:Python最常用的图像处理库,负责水印添加
- piexif:专门处理EXIF元数据的轻量级库
2.2 创建后处理脚本
新建一个Python文件image_postprocessor.py,写入以下基础代码:
from PIL import Image, ImageDraw, ImageFont
import piexif
from datetime import datetime
import os
class ImagePostProcessor:
def __init__(self):
self.watermark_text = "Generated by Qwen-Image-2512"
self.creator = "Your Name/Studio"
def process_image(self, image_path, output_path=None):
"""主处理函数"""
if output_path is None:
output_path = image_path
# 添加水印
self.add_watermark(image_path, output_path)
# 添加EXIF数据
self.add_exif_data(output_path)
print(f"处理完成: {output_path}")
这样就搭建好了脚本的基本框架,接下来我们分别实现水印和EXIF功能。
3. 添加版权水印实战
3.1 基础水印实现
在刚才的类中添加水印方法:
def add_watermark(self, input_path, output_path):
"""添加文字水印到图片右下角"""
try:
# 打开图片
image = Image.open(input_path)
# 创建绘图对象
draw = ImageDraw.Draw(image)
# 尝试使用系统字体,如果失败则使用默认字体
try:
font = ImageFont.truetype("Arial", 20)
except:
font = ImageFont.load_default()
# 获取图片尺寸和水印文本尺寸
width, height = image.size
text_width = draw.textlength(self.watermark_text, font=font)
# 计算水印位置(右下角,留10像素边距)
position = (width - text_width - 10, height - 30)
# 添加半透明水印(颜色、位置、字体)
draw.text(position, self.watermark_text, fill=(255, 255, 255, 128), font=font)
# 保存图片
image.save(output_path)
except Exception as e:
print(f"添加水印失败: {e}")
这个水印功能有几个实用特点:
- 自动定位到图片右下角,不影响主体内容
- 使用半透明白色文字,在各种背景色上都清晰可见
- 有简单的错误处理,避免因为字体问题导致整个脚本失败
3.2 高级水印定制
如果你想要更专业的水印效果,可以试试这个增强版本:
def add_advanced_watermark(self, input_path, output_path):
"""增强版水印:带背景框和自定义样式"""
image = Image.open(input_path).convert("RGBA")
# 创建水印图层
watermark = Image.new("RGBA", image.size, (0, 0, 0, 0))
draw = ImageDraw.Draw(watermark)
# 使用更美观的字体(如果可用)
try:
font = ImageFont.truetype("Arial", 16)
except:
font = ImageFont.load_default()
text = f"© {self.creator} | Qwen-Image-2512"
bbox = draw.textbbox((0, 0), text, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
# 计算位置(右下角)
x = image.width - text_width - 15
y = image.height - text_height - 15
# 绘制半透明背景
draw.rectangle(
[x - 5, y - 5, x + text_width + 5, y + text_height + 5],
fill=(0, 0, 0, 128) # 半透明黑色背景
)
# 绘制文字
draw.text((x, y), text, fill=(255, 255, 255, 200), font=font)
# 合并水印和原图
watermarked = Image.alpha_composite(image, watermark)
watermarked = watermarked.convert("RGB")
watermarked.save(output_path)
这种水印看起来更专业,带有的背景框让文字在任何背景下都清晰可读。
4. 添加EXIF元数据详解
4.1 基础EXIF信息添加
EXIF是嵌入在图片文件里的"隐形"信息,不会影响图片显示,但能用专业软件查看:
def add_exif_data(self, image_path):
"""添加EXIF元数据到图片"""
try:
# 创建基础的EXIF数据
exif_dict = {
"0th": {
piexif.ImageTag.Software: b"Qwen-Image-2512 Generator",
piexif.ImageTag.Artist: self.creator.encode(),
},
"Exif": {
piexif.ExifTag.DateTimeOriginal: datetime.now().strftime("%Y:%m:%d %H:%M:%S").encode(),
}
}
# 转换为EXIF字节数据
exif_bytes = piexif.dump(exif_dict)
# 添加到图片
image = Image.open(image_path)
image.save(image_path, exif=exif_bytes)
except Exception as e:
print(f"添加EXIF数据失败: {e}")
4.2 完整EXIF信息方案
为了让元数据更加完整,我们可以添加更多详细信息:
def add_complete_exif_data(self, image_path, prompt=""):
"""完整的EXIF信息方案"""
# 准备详细的数据
exif_dict = {
"0th": {
piexif.ImageTag.Make: b"AI Generated",
piexif.ImageTag.Model: b"Qwen-Image-2512",
piexif.ImageTag.Software: b"Qwen-Image-2512 Generator v1.0",
piexif.ImageTag.Artist: self.creator.encode(),
piexif.ImageTag.Copyright: f"Copyright {datetime.now().year} {self.creator}".encode(),
},
"Exif": {
piexif.ExifTag.DateTimeOriginal: datetime.now().strftime("%Y:%m:%d %H:%M:%S").encode(),
piexif.ExifTag.DateTimeDigitized: datetime.now().strftime("%Y:%m:%d %H:%M:%S").encode(),
},
"1st": {},
"thumbnail": None
}
# 添加生成提示词(如果提供)
if prompt:
user_comment = f"Prompt: {prompt}".encode()
exif_dict["Exif"][piexif.ExifTag.UserComment] = user_comment
try:
exif_bytes = piexif.dump(exif_dict)
image = Image.open(image_path)
# 保存时保留原有质量
image.save(image_path, exif=exif_bytes, quality=95)
except Exception as e:
print(f"添加详细EXIF失败: {e}")
这样添加后,任何人用EXIF查看器都能看到完整的生成信息。
5. 完整脚本与自动化集成
5.1 完整的后处理脚本
把前面的代码整合起来:
from PIL import Image, ImageDraw, ImageFont
import piexif
from datetime import datetime
import os
class QwenImagePostProcessor:
def __init__(self, creator="My AI Studio"):
self.creator = creator
self.watermark_text = f"Generated by {creator}"
def process_single_image(self, image_path, output_path=None, prompt=""):
"""处理单张图片"""
if output_path is None:
output_path = image_path
print(f"处理图片: {os.path.basename(image_path)}")
# 依次处理
self.add_watermark(image_path, output_path)
self.add_complete_exif_data(output_path, prompt)
return output_path
def process_directory(self, directory_path, prompt=""):
"""处理整个目录的图片"""
supported_formats = ('.jpg', '.jpeg', '.png', '.webp')
for filename in os.listdir(directory_path):
if filename.lower().endswith(supported_formats):
image_path = os.path.join(directory_path, filename)
self.process_single_image(image_path, prompt=prompt)
# 这里包含前面所有的add_watermark、add_advanced_watermark、
# add_exif_data、add_complete_exif_data方法
# ...(为了节省篇幅,实际代码请参考前面章节)
# 使用示例
if __name__ == "__main__":
processor = QwenImagePostProcessor(creator="我的AI创作工作室")
# 处理单张图片
processor.process_single_image("生成的图片.jpg", prompt="一只可爱的猫咪")
# 或者处理整个文件夹
# processor.process_directory("./生成的图片/", prompt="系列插画")
5.2 与Qwen-Image-2512集成
如果你想要完全自动化,可以在生成图片后立即调用后处理:
def generate_with_watermark(prompt_text):
"""模拟生成并自动添加水印的流程"""
# 1. 首先用Qwen-Image-2512生成图片
# generated_image_path = qwen_generate(prompt_text)
generated_image_path = "temp_generated_image.jpg" # 假设这是生成的图片
# 2. 自动后处理
processor = QwenImagePostProcessor()
final_image_path = processor.process_single_image(
generated_image_path,
output_path="final_image_with_watermark.jpg",
prompt=prompt_text
)
return final_image_path
# 使用示例
# result = generate_with_watermark("星空下的城堡,梦幻风格")
6. 实际效果与使用建议
6.1 效果对比展示
使用后处理脚本前后的对比:
- 处理前:干净的图片,但没有任何版权信息
- 处理后:右下角有半透明水印,EXIF中包含完整生成信息
你可以在图片属性中查看EXIF信息,或者在社交平台分享时,水印会自动保护你的创作权益。
6.2 实用建议
根据不同的使用场景,我有这些建议:
- 个人使用:使用基础水印,保持图片简洁
- 商业创作:使用增强版水印+完整EXIF,最大程度保护版权
- 批量处理:使用
process_directory方法处理整个文件夹 - 自定义设置:根据需求调整水印文字、位置、透明度
如果水印位置不合适,可以修改代码中的坐标值;如果觉得水印太明显或太不明显,调整透明度参数即可。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐

所有评论(0)