首页 > 编程语言 >Python工具箱系列(五十三)

Python工具箱系列(五十三)

时间:2024-06-17 16:43:13浏览次数:11  
标签:string img Python Image 水印 inputimage 工具箱 五十三 图片

​​水印

水印是一种常见的图片处理需求。当既需要展示,又需要保护知识产权时,就需要使用文字或者图片来打水印。下面的代码展示了文字水印与图片水印的过程。

​--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

from pathlib import Path

from PIL import Image, ImageDraw, ImageFont, ImageGrab


def screenshot(box=None, outputfilename='screen.png'):
    """
    屏幕截图

    Args:
        box (object, optional): 屏保的矩形位置
        outputfilename (str, optional): 要输出的文件
    """
    if not box:
        # 全屏
        im = ImageGrab.grab()
    else:
        im = ImageGrab.grab(box)

    im.save(outputfilename)


def genwatername(inputname):
    """
    根据

    Args:
        inputname (string): 原始图片文件名

    Returns:
        string: 生成水印后的文件名
    """
    p = Path(inputname)
    return Path.joinpath(p.parent, f'{p.stem}-water.png')


def textwater(inputimage, text, rotatedegree=0):
    """
    给图片加上文字
    truetype设置字体、文字大小
    stxingka.ttf华文行楷 simkai.ttf 楷体 simli.ttf 隶书

    Args:
        inputimage (string): 要加文字水印的图片
        text (string): 要加入的文字
    """

    font = ImageFont.truetype("C:\\WINDOWS\\Fonts\\simkai.ttf", 100)

    # 生成一个一样大的文字图片
    img = Image.open(inputimage)
    img_txt = Image.new('RGBA', img.size, (0, 0, 0, 0))
    draw = ImageDraw.Draw(img_txt)
    draw.text((50, 200), (text), fill=(255, 255, 255, 255), font=font)
    img_txt = img_txt.rotate(rotatedegree)

    # 进行图片合成,两个图片必须具有相同的mode和size
    img_wm = Image.alpha_composite(img.convert('RGBA'), img_txt)

    img_wm.save(genwatername(inputimage))


def figwater(inputimage, maskimage):
    """
    给图片加水印图片(例如公司的LOGO等)

    Args:
        inputimage (string): 原图
        maskimage (string): 水印图片
    """
    img = Image.open(inputimage)

    # 加图片水印
    img_logo = Image.open(maskimage).reduce(8)
    img_mask = Image.new('RGBA', img.size, (0, 0, 0, 0))
    img_mask.paste(img_logo, (260, 80))
    img_wm = Image.alpha_composite(img.convert('RGBA'), img_mask)

    # 保存水印图片
    img_wm.save(genwatername(inputimage))


targetfilename = r'd:\test\fullscreen.png'
screenshot(outputfilename=targetfilename)
textwater(targetfilename, '宁在一思进,莫在一思停')

targetfilename = r'd:\test\11.jpeg'
figwater(targetfilename, r"D:\test\logo-full.png")

此时文字文印的效果如下图所示。

 

 

其中背景图是使用PIL截屏而来。在文字水印时,必须指定中文字体的位置。图片水印其实是2个图片的融合。在本例中要先准备好一张公司的logo图如下所示。

 

 

随后与目标图相融合,效果如下所示。

 

 

事实上,可以从本例出发,将公司的LOGO放在再小一些,旋转后复制多次,就可以形成更复杂的水印效果。水印与散列很类似,是一个单向的过程,水印极难去除,即使网上号称的去码神器其实效果真的一般,而且一些基于AI的也只是“合理”的猜想,不是真正的还原。

标签:string,img,Python,Image,水印,inputimage,工具箱,五十三,图片
From: https://www.cnblogs.com/shanxihualu/p/18252696

相关文章

  • 使用Jupyter(python+opencv)实现特别难的脚本-Day2
    Day2那昨天实现了这个自动挖土,我发现这个yb也是很扯0的东西,所以今天简单优化优化,完了再简单优化一下双手,写个yb吧。首先依旧是库一小堆儿fromPILimportImageimportpyautoguiimportrandomimportpygetwindowasgwimporttime然后那既然是优化那肯定是面向对象......
  • 使用Jupyter(python+opencv)实现很难的脚本-Day1
    由于xx西游没办法自动挖图,于是懒狗的我只能自己写一段脚本来实现挖土自由。首先介绍几个比较重要的库都需要自行install。fromPILimportImage#用于计算图片大小的库importpyautogui#用于抓取目标位置的库importpygetwindowasgw#用于得到窗口大小的库......
  • 开发一个python工具,pdf转图片,并且截成单个图片,然后修整没用的白边及循环遍历文件夹全
    今天推荐一键款本人开发的pdf转单张图片并截取没有用的白边工具一、开发背景:业务需要将一个pdf文件展示在前端显示,但是基于各种原因,放弃了h5使用插件展示原因有多个,文件资源太大加载太慢、pdf展示兼容性问题、pdf展示效果不好、pdf字体有时缺失等等,所以将项目中的协议等,全部由p......
  • python中常见re正则表达式(整数、小数、邮箱、号码、车牌、x开头y结尾)大合集(值得收
    目录专栏导读库的介绍库的安装1、匹配整数2、匹配某几位整数3、匹配小数4、匹配电话格式1:11位数字格式2:187-12341234或者187-1234-1234格式3:(123)456-7890,或者+86123-456-78905、匹配邮箱6、匹配车牌7、xx为开头yy为结尾9、匹配中文10、匹配非中文总结专栏导读......
  • 交叉编译python第三方库
    这里我们以编译androidpython程序为例工具crossenv名词对于交叉编译的各个部分,没有标准的词汇表,不同的资源经常会使用相互矛盾的术语。为了避免混淆,我们只使用GNU术语,这是Python本身使用的。host就是你编译出来的包要运行的平台,比如这里是Androidbuild进......
  • Python中的迭代器与生成器
    目录一、引言二、迭代器(Iterator)迭代器的概念迭代器的使用三、生成器(Generator)生成器的概念生成器的使用四、迭代器与生成器的性能与内存优化性能优化内存优化五、案例分析六、进阶用法推导式(Comprehensions)生成器表达式(GeneratorExpressions)七、总结一、引......
  • 精选了10个Python实战项目(附源码),拿走即用!
    ① 猜字游戏在这个游戏中,你必须一个字母一个字母的猜出秘密单词。如果你猜错了一个字母,你将丢掉一条命。正如游戏名那样,你需要仔细选择字母,因为你的生命数量非常有限。importrandom#生命次数lives=3#神秘单词,随机选择words=['pizza','fairy','teeth','......
  • 小白的Python+Anaconda+vscode安装教程(win11系统手把手教学)
    python下载安装python下载安装过程下载地址:https://www.python.org/![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/33bd022a0d104a22b9e8caf7abb4e294.png我这里选择了3.7.9版本选中刚才下载的.exe文件,右键-打卡上一个页面点击customizinstallation后......
  • Python遥感影像叠加分析:基于一景数据提取另一数据
      本文介绍基于Python中GDAL模块,实现基于一景栅格影像,对另一景栅格影像的像元数值加以叠加提取的方法。  本文期望实现的需求为:现有一景表示6种不同植被类型的.tif格式栅格数据,以及另一景与前述栅格数据同区域的、表示植被参数的.tif格式栅格数据;我们希望基于前者中的植被类......
  • 盘点一个Python自动化办公的问题
    大家好,我是Python进阶者。一、前言前几天在Python铂金交流群【逆光】问了一个Python自动化办公的问题,问题如下:问题我现在有两个表a、b,for循环a、b,如果a的条件满足b,则把b的值赋给a,目前a有7万条数据,b有300条。我写的代码20分钟都没跑完。这是代码,请问改怎么解决?二、实现过......