侧边栏壁纸
  • 累计撰写 54 篇文章
  • 累计创建 31 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

技术分享-Python简单几行代码实现给图片增加水印

nankle
2024-09-21 / 0 评论 / 0 点赞 / 11 阅读 / 3518 字
温馨提示:
本文最后更新于 2024-09-21,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

最近在微信公众号做了一个自动回复的程序,主要功能是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”可以体验,大概的效果是这样的。

0

评论区