Python工具箱系列(五十三)

news/2024/10/2 18:20:04

​​水印

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

​--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

from pathlib import Pathfrom PIL import Image, ImageDraw, ImageFont, ImageGrabdef 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和sizeimg_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的也只是“合理”的猜想,不是真正的还原。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44767.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

高效开发系列:鸿蒙原生app套用混合app开发思路

使用混合App开发思路来开发鸿蒙原生App是一种可行的方案。该方案可以提高开发效率、降低开发成本,但同时也存在一些劣势。开发者可以根据自己的具体需求来决定是否采用这种方案。随着鸿蒙OS生态的不断完善,鸿蒙原生App开发也将迎来新的机遇和挑战。相信在不久的将来,鸿蒙原生…

操作系统B期末复习(STD)

操作系统1、什么是操作系统 基本特征是什么? 操作系统是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充2、PCB TCB FCB 相关内容 PCB: ①基本信息:进程控制块,又叫进程表,是操作系统中最重要的记录型数据结构。记录了操作系统所需的,用于描述进程的当前情况以及…

React中AntDesign upload组件 自定义请求将多个上传请求合并成一个并

接口文档核心代码 const ImportPictureUpload = () => {const [fileList, setFileList] = useState([])const onBeforeUpload = (file: any, fileList: any) => {setFileList(fileList)return false;}useEffect(() => {if(fileList.length > 0) {onCustomRequest()…

java构造器

构造器分为无参构造与有参构造 每一个类都有一个隐藏起来的无参构造 这个午餐构造没有返回值和返回类型,且方法名必须与类名相同,且必须是public1.使用new关键字必须要有构造器 2.构造器用来初始化 alt+insert快捷键快速创建构造器当有有参构造,却想调用无参构造时,必须有一…

新版本idea找不到自己想要的图标

新版本idea找不到自己想要的图标 众所周知,新版本的idea页面简介了不少,但是有时候我们想要的图标一下子找不到那该怎么办呢。 可以直接进行搜索

解决Edg看视频无法旋转问题,解决console无法复制粘贴问题

F12打开控制台(console),然后输入下方的语句,就解除复制粘贴的限制document.body.contentEditable=true 我们发现屏幕无法旋转 此时我们需要屏幕旋转,console中输入下方指令document.querySelector(".bpx-player-video-wrap").style.transform = "rotate(+90…

Tita:定期360评估系统优于年度绩效考核

与大多数组织目前使用的基于评级的绩效评估系统相比,360反馈方法可以成为更高效、准确和有效的替代方案。 员工绩效管理是任何组织的关键职能,无论大小。此外,它在使组织能够成功实现其长期和短期业务目标方面发挥着重要作用。然而,绩效管理或审查不应只关注高绩效者,还应…

如何根据自己的开发板型号下载和配置交叉编译链

本文介绍了如何根据所使用的不同开发板配置不同的交叉编译环境. 由于在移植LVGL到不同开发板上时遇到了一些问题, 故在问题解决后整理和总结和该文章.V1.0 2024年6月17日 发布于博客园目录 目录目录基本概念本地编译交叉编译如何选择编译器目标芯片架构大小端目标操作系统C标准…