最近在微信公众号做了一个自动回复的程序,主要功能是cpu性能查询与对比,数据有限,只能对比个跑分,但是对有些人来说也是有点用的,生成的对比图可以直观的看到两个cpu的大概性能差距。其中就用到了给对比图增加水印的功能。
下面分享实现这个功能的其中一个小模块,之所以要做水印,是为了让更多人能找到这个功能,分享给大家使用。
代码实现:
# watermark.py
from PIL import Image, ImageDraw, ImageFont
def add_watermark(image_path, watermark_text="Sample Watermark"):
"""
Adds a watermark to the specified image and saves it back to the same path.
:param image_path: The path to the image file.
:param watermark_text: The text to be used as the watermark.
"""
# 打开图片
image = Image.open(image_path)
# 获取图片尺寸
width, height = image.size
# 创建一个透明层
watermark_layer = Image.new('RGBA', image.size, (255, 255, 255, 0))
# 创建一个画布
draw = ImageDraw.Draw(watermark_layer)
# 设置字体
font = ImageFont.truetype("arial.ttf", 120) # 使用系统自带的 Arial 字体,大小为 36
# 计算文本的位置
# 使用 textbbox 获得文本框的左下角和右上角坐标,然后计算出宽度和高度
left, top, right, bottom = draw.textbbox((0, 0), watermark_text, font=font)
text_width = right - left
text_height = bottom - top
# 设置水印位置为右下角,留出边缘空隙
margin = 120 # 边缘留出的距离
position = (width - text_width - margin, height - text_height - margin)
# 添加透明度为 灰色文本水印
draw.text(position, watermark_text, fill=(180, 180, 180, 140), font=font)
# 将水印层合并到原始图片上
watermarked_image = Image.alpha_composite(image.convert('RGBA'), watermark_layer)
# 保存带有水印的图片,覆盖原图
watermarked_image.save(image_path)
print(f"Watermark added and saved to {image_path}")
if __name__ == "__main__":
import sys
if len(sys.argv) > 1:
add_watermark(sys.argv[1])
else:
print("Usage: python watermark.py <image_path>")
这个程序需要注意的地方有几点
图片路径
上面的代码实现的是直接替换原图片,所以读取和保存的都是同一个路径,如果需要保留原图,需要增加一个新路径。
# 打开图片
image = Image.open(image_path)
# 保存带有水印的图片,覆盖原图
watermarked_image.save(image_path)
水印的灰度和透明度调整
draw.text(position, watermark_text, fill=(180, 180, 180, 140), font=font)
这行代码有四个数字,前三个是颜色,RGB的,调整可以改变颜色或者灰度,最后一个是透明度,数字越小越透明。
水印位置调整
margin = 120 # 边缘留出的距离
这个代码是调整水印位置的,我写的这个是基于右下角计算离着边缘多远的意思,数字越大离着边缘越远,也可以重新这个计算,换成需要的方式定位。
字体
font = ImageFont.truetype("arial.ttf", 120)
上面的字体文件只支持英文,可以替换为自己系统支持的中文字体。
比如:font = ImageFont.truetype("/usr/share/fonts/truetype/wqy/wqy-microhei.ttc", 120)
说明:
这个代码是用Python实现的,作者虽然平时也做开发,但是主要是做java方面,Python之前没接触过,所以有些代码是我起了个架子,提供逻辑让AI帮忙修改的,大家有需要可以直接拿去用。
关注微信公众号“nankle的分享”回复关键词“cpu”可以体验,大概的效果是这样的。
评论区