当前位置: 首页 > news >正文

Python 图片水印处理工具

  1. 自定义水印文本
  2. 自定义水印位置
  3. 支持图片裁剪
  4. 支持各种图片格式
from PIL import Image, ImageDraw, ImageFont
import os

class ImageWatermarker:
    def __init__(self, font_path=None, font_size=40):
        """
        初始化水印处理器
        font_path: 字体文件路径,默认使用系统默认字体
        font_size: 字体大小,默认40
        """
        if font_path and os.path.exists(font_path):
            self.font = ImageFont.truetype(font_path, font_size)
        else:
            self.font = ImageFont.load_default()
        
    def add_watermark(self, image_path, text, position='center', crop=None, output_path=None):
        """
        为图片添加水印
        image_path: 图片路径
        text: 水印文字
        position: 水印位置,可以是'center'或者(x,y)坐标
        crop: 裁剪区域,格式为(left, top, right, bottom)
        output_path: 输出路径,默认为原图片名称加上"_watermarked"
        """
        # 打开图片
        img = Image.open(image_path)
        
        # 如果需要裁剪
        if crop:
            img = img.crop(crop)
            
        # 创建可绘制对象
        draw = ImageDraw.Draw(img)
        
        # 获取文字大小
        text_width, text_height = draw.textsize(text, self.font)
        
        # 计算水印位置
        if position == 'center':
            x = (img.width - text_width) // 2
            y = (img.height - text_height) // 2
        else:
            x, y = position
            
        # 添加水印
        draw.text((x, y), text, font=self.font, fill=(255, 255, 255, 128))
        
        # 设置输出路径
        if not output_path:
            file_name, ext = os.path.splitext(image_path)
            output_path = f"{file_name}_watermarked{ext}"
            
        # 保存图片
        img.save(output_path)
        return output_path

使用示例:

from watermark import ImageWatermarker

# 创建水印处理器实例
watermarker = ImageWatermarker()

# 添加居中水印
watermarker.add_watermark(
    "input.jpg",
    "版权所有",
    position='center'
)

# 添加自定义位置的水印
watermarker.add_watermark(
    "input.jpg",
    "版权所有",
    position=(100, 100),
    output_path="output_custom.jpg"
)

# 裁剪并添加水印
watermarker.add_watermark(
    "input.jpg",
    "版权所有",
    position='center',
    crop=(100, 100, 800, 600),
    output_path="output_cropped.jpg"
)

这个类提供了以下功能:

  1. 可以自定义字体和字体大小
  2. 支持水印位置的自定义(居中或指定坐标)
  3. 支持图片裁剪
  4. 可以自定义输出路径
  5. 水印文字支持半透明效果

使用时需要安装 Pillow 库:

pip install Pillow

如果需要使用自定义字体,可以在创建实例时指定字体文件路径:

watermarker = ImageWatermarker(font_path="path/to/font.ttf", font_size=50)
http://www.dtcms.com/a/104986.html

相关文章:

  • GZ073网络系统管理赛项赛题第1套模块A:网络构建解题笔记
  • 数据结构C语言练习(两个队列实现栈)
  • 【Arthas】 JVM分析工具——基础使用
  • 以下是C/C++后台开发常见的高概率面试题
  • 一起学大语言模型-通过ollama搭建本地大语言模型服务
  • 【Linux】用户向硬件寄存器写入值过程理解
  • Windows 图形显示驱动开发-WDDM 2.4功能-基于 IOMMU 的 GPU 隔离(三)
  • 程序化广告行业(48/89):DSP与外部平台对接的关键要点解析
  • 检索增强生成(RAG):强化 AI 智能体的知识 “武装”
  • 【C++游戏引擎开发】《线性代数》(6):SVD(奇异值分解)的数学原理与实现
  • Day19 -思维导图 -V2024小迪全栈
  • Uni-app入门到精通:uni-app的基础组件
  • Debian用二进制包安装mysql8.0.41 笔记250401
  • 链表基本操作
  • idea中的--、-D、-X的区别
  • Docker容器深度解析:从基础概念到企业级实践
  • LSTM网络是什么?
  • Suricata配置之YAML
  • Netty的心跳机制怎么实现的?
  • 【408--考研复习笔记】操作系统----知识点速览
  • 深入解析拓扑排序:算法与实现细节
  • EL表达式与JSTL标签库实战指南:从基础到OA系统改造
  • STL新增内容
  • flutter 曲线学习 使用第三方插件实现左右滑动
  • 厘米级定位赋能智造升级:品铂科技UWB技术驱动工厂全流程自动化与效能跃升”
  • Boost库中的谓词函数
  • 基于大模型的室间隔缺损手术全流程预测与方案研究报告
  • 蹊跷的崩溃:CoreData 数据保存时提示“不可接受类型”(Unacceptable type)
  • k8s常用总结
  • C++刷题(四):vector