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')

相关推荐

  1. vue组件上传图片的时候图片加上水印

    2024-05-25 22:32:36       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-25 22:32:36       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-25 22:32:36       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-25 22:32:36       82 阅读
  4. Python语言-面向对象

    2024-05-25 22:32:36       91 阅读

热门阅读

  1. 封装UUID

    2024-05-25 22:32:36       28 阅读
  2. 美国空军出版物:网络空间作战

    2024-05-25 22:32:36       28 阅读
  3. C#和C++有什么区别?

    2024-05-25 22:32:36       32 阅读
  4. 微信小程序post请求

    2024-05-25 22:32:36       29 阅读
  5. 若依框架代码生成器详解:从入门到高级定制

    2024-05-25 22:32:36       30 阅读
  6. 退格(删除)键

    2024-05-25 22:32:36       33 阅读
  7. (六)Python3 接口自动化测试,pytest-html报告的使用

    2024-05-25 22:32:36       28 阅读
  8. 【MySQL精通之路】InnoDB(3)-MVCC多版本管理

    2024-05-25 22:32:36       36 阅读
  9. gdb调试openjdk

    2024-05-25 22:32:36       28 阅读
  10. 达梦SQL实例大全

    2024-05-25 22:32:36       34 阅读
  11. 【RocketMQ精通之路】对比RocketMQ和ActiveMQ和Kafka

    2024-05-25 22:32:36       37 阅读
  12. MVCC 是什么?InnoDB 是如何实现 MVCC 机制的?

    2024-05-25 22:32:36       31 阅读