python中怎么给图片加水印

发布时间:2021-07-05 14:58:25 作者:Leah
来源:亿速云 阅读:165
# Python中怎么给图片加水印

在数字内容创作中,为图片添加水印是保护版权和声明来源的常见需求。Python凭借丰富的图像处理库(如Pillow和OpenCV),可以轻松实现这一功能。本文将介绍两种主流方法,并提供完整代码示例。

---

## 方法一:使用Pillow库添加文字水印

Pillow(PIL Fork)是Python最常用的图像处理库之一,适合基础水印需求。

### 安装依赖
```bash
pip install pillow

示例代码

from PIL import Image, ImageDraw, ImageFont

def add_text_watermark(input_path, output_path, text, font_size=20, opacity=0.5):
    # 打开原始图片
    base_image = Image.open(input_path).convert("RGBA")
    
    # 创建透明水印层
    watermark = Image.new("RGBA", base_image.size, (0,0,0,0))
    draw = ImageDraw.Draw(watermark)
    
    # 设置字体(需自行提供.ttf文件或使用默认字体)
    try:
        font = ImageFont.truetype("arial.ttf", font_size)
    except:
        font = ImageFont.load_default()
    
    # 计算水印位置(右下角)
    text_width, text_height = draw.textsize(text, font)
    x = base_image.width - text_width - 10
    y = base_image.height - text_height - 10
    
    # 绘制半透明水印
    draw.text((x, y), text, font=font, fill=(255,255,255, int(255*opacity)))
    
    # 合并图层并保存
    result = Image.alpha_composite(base_image, watermark)
    result.save(output_path)

# 使用示例
add_text_watermark("input.jpg", "output.png", "© Your Brand", font_size=30)

参数说明


方法二:使用OpenCV添加图片水印

当需要添加Logo等图像水印时,OpenCV更为合适。

安装依赖

pip install opencv-python numpy

示例代码

import cv2
import numpy as np

def add_image_watermark(input_path, output_path, watermark_path, opacity=0.3):
    # 读取图片和水印
    base_img = cv2.imread(input_path)
    watermark = cv2.imread(watermark_path, cv2.IMREAD_UNCHANGED)
    
    # 调整水印尺寸(保持比例)
    h, w = base_img.shape[:2]
    scale = min(w//4, h//4) / max(watermark.shape[0], watermark.shape[1])
    watermark = cv2.resize(watermark, (0,0), fx=scale, fy=scale)
    
    # 计算位置(右下角)
    x = w - watermark.shape[1] - 10
    y = h - watermark.shape[0] - 10
    
    # 透明混合
    overlay = base_img.copy()
    overlay[y:y+watermark.shape[0], x:x+watermark.shape[1]] = \
        overlay[y:y+watermark.shape[0], x:x+watermark.shape[1]] * (1-opacity) + \
        watermark[:,:,0:3] * opacity
    
    cv2.imwrite(output_path, overlay)

# 使用示例
add_image_watermark("photo.jpg", "watermarked.jpg", "logo.png", opacity=0.5)

注意事项

  1. PNG水印需包含透明通道
  2. 大尺寸水印建议先缩放到合适比例
  3. 可通过cv2.addWeighted()实现更复杂的混合效果

进阶技巧

  1. 批量处理:使用os.listdir()遍历文件夹
  2. 动态调整:根据图片亮度自动选择水印颜色(黑/白)
  3. 安全防护:添加隐形数字水印(需使用DCT/DWT等算法)

通过上述方法,您可以快速为图片添加专业水印。根据实际需求选择方案——简单文字水印用Pillow,复杂图像混合用OpenCV。 “`

推荐阅读:
  1. 如何在Laravel中给图片加水印?
  2. java如何给图片加水印?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:Python中__init__和__new__有什么区别

下一篇:Python中怎么读取文本文件的内容

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》