python给图片加上图片水印

python给图片加上图片水印

  • 作用
  • 效果
  • 代码

作用

  1. 给图片加上图片水印
  2. 图片水印的透明度,位置可自定义

效果

原始图片:
在这里插入图片描述

水印图片:
在这里插入图片描述

添加水印后的图片:
在这里插入图片描述

代码

from PIL import Image, ImageDraw, ImageFont


def add_watermark(input_image_path, watermark_image_path, output_image_path, position=(0.5, 0.5), opacity=0.5):
    """
    在图片上添加水印

    :param input_image_path: 输入图片路径
    :param watermark_image_path: 水印图片路径
    :param output_image_path: 输出图片路径
    :param position: 水印位置,默认为图片中心 (x, y) 坐标值在0到1之间
    :param opacity: 水印的不透明度,1为完全不透明,0为完全透明
    :return: None
    """
    base_image = Image.open(input_image_path).convert("RGBA")
    watermark = Image.open(watermark_image_path).convert("RGBA")

    # 获取图片尺寸
    base_width, base_height = base_image.size
    watermark_width, watermark_height = watermark.size

    # 计算水印位置
    left = int(base_width * position[0] - watermark_width / 2)
    top = int(base_height * position[1] - watermark_height / 2)

    # 限制水印位置在图片内
    left = max(0, left)
    top = max(0, top)
    right = min(base_width, left + watermark_width)
    bottom = min(base_height, top + watermark_height)

    # 调整水印图片大小以适应新的位置,并使用抗锯齿滤波器
    watermark = watermark.resize((right - left, bottom - top), Image.LANCZOS)

    # 在水印图片上应用透明度
    # 注意:这里我们假设水印图片已经有了一个alpha通道,否则需要另外处理
    # 我们通过创建一个新的RGBA图片,并用水印图片和其alpha值来填充它,然后调整alpha值来改变不透明度
    watermark_rgba = Image.new('RGBA', watermark.size, (255, 255, 255, int(255 * opacity)))
    watermark_rgba.alpha_composite(watermark)

    # 将水印添加到原始图片上
    base_image.paste(watermark_rgba, (left, top), watermark_rgba)

    # 保存图片
    base_image.save(output_image_path)


# 使用示例
add_watermark('1.png', 'te.png', 'output_with_watermark.png')
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立秋6789

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值