码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • python3使用PIL添加中文文本水印背景


    环境:Windows10_x64 
    Python版本 :3.9.2
    Pillow版本:9.1.1
     
    写的博客文章被转载且不注明出处的情况时有发生,甚至有部分转载者将文章配图添加自己的水印!为了保护作者劳动成果,添加水印是一个可选项。
    今天记录下Windows10环境下使用python3.9简单实现批量添加中文文本水印背景的过程,并提供示例代码及相关资源下载,可从如下渠道获取:
    关注微信公众号(聊聊博文,文末可扫码)后回复 20230704 获取。 

    一、背景描述

    python的PIL库可进行图片处理,十分强大,可使用该库实现图片添加水印背景的需求。
    可通过pip进行安装(默认安装最新版),命令如下:
    pip install Pillow 

    pypi地址: https://pypi.org/project/Pillow/

    文档地址: https://pillow.readthedocs.io/en/stable/

    二、具体实现

    这里列举下实现文本水印背景的关键点。

    1、生成文本背景

    可通过ImageDraw.text实现:
    https://pillow.readthedocs.io/en/stable/reference/ImageDraw.html#PIL.ImageDraw.ImageDraw.text

     

    中文文本可通过设置正确的字体实现:
    font = ImageFont.truetype("simsun.ttc", fontSize,encoding="utf-8")
    文本颜色可通过RGB值设置,示例如下:
    fill=(106,106,106)

    2、旋转文本

     可通过rotate函数实现:
    https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.rotate

     3、设置水印

    可通过Image.paste函数实现:
    https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.paste

     4、生成水印背景

    1)需要通过循环控制,多次设置背景图片;
    复制代码
    i,j = 0,0
    while True:
        x,y = i*step,i*step
        if y < height : 
            x = 0
        if y > height : 
            x = j*step
            j = j + 1
            y = height - 10
        #print(i,"xy :",x,y)
        draw_text(img,(x,y),fill,mask,rotated_mask)
        if (x + step > width ) and (y + step > height ) : break
        i = i + 1
    复制代码
    2)导出时需要添加质量参数,避免导出的图片失真;
    img.save(dstFile,optimize=True, quality=100)

    5、多进程加速

    批量添加文本水印背景时,可使用进程池进行加速。
    复制代码
    pool = Pool(processes=8)    # set the processes max number 
    for root, dirs, files in os.walk(srcDir):
        for name in files:
            srcFile = os.path.join(root, name)
            dstFile = os.path.join(dstDir, name)
            print("%s => %s" % (srcFile,dstFile))
            # add_watermark(srcFile,dstFile,fontSize,myText,angle,fill,step)
            result = pool.apply_async(add_watermark,(srcFile,dstFile,fontSize,myText,angle,fill,step))
    pool.close()
    pool.join()  
    复制代码
    完整源码可以从如下途径获取:
    关注微信公众号(聊聊博文,文末可扫码)后回复 20230704 获取。 

    三、运行效果

    这里演示下python3使用PIL添加中文文本水印背景的运行效果,具体如下:

     运行效果演示视频获取途径:

    关注微信公众号(聊聊博文,文末可扫码)后回复 2023070401 获取。 

    四、资源下载

    本文涉及源码和文件,可以从如下途径获取:
    关注微信公众号(聊聊博文,文末可扫码)后回复 20230704 获取。 

  • 相关阅读:
    数据库并发问题及四种隔离级别
    【iOS开发】——Category底层原理、Extension、关联对象
    每日一练 | 网络工程师软考真题Day45
    Centos7下MongoDB安装到基本命令的学习
    轮胎的分类区分
    板块一 Servlet编程:第五节 Cookie对象全解 来自【汤米尼克的JAVAEE全套教程专栏】
    Visual Studio 2019 2022 创建 Visual Studio 2013中的的Win32项目
    操作系统知识点梳理-进程线程
    Pegasus智能家居套件样例开发--软定时器
    LeetCode 面试题 08.01. 三步问题
  • 原文地址:https://www.cnblogs.com/MikeZhang/p/pyWatermaker20230704.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号