Python工具箱系列(五十三)

​​水印

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

​--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.mzph.cn/pingmian/28978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏找不到steam_api64.dll无法继续执行代码的解决方法

在电脑使用过程中,我们可能会遇到一些错误提示,其中之一就是“steam_api64.dll丢失”。那么,steam_api64.dll到底是干嘛的?为什么会丢失?对电脑有什么具体影响?如何解决这个问题?本文将为您详细…

Python基础教程(九):Lambda 函数

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

golang:对struct排序的方法

golang对struct排序的方法 以下代码示例,通过对Student 结构体的age字段进行从小到大和从大到小排序 方法一 使用 sort.Slice() 进行排序 package mainimport ("fmt""sort" )type Student struct {name stringage int }func main() {stude…

vivado NODE、PACKAGE_PIN

节点是Xilinx部件上用于路由连接或网络的设备对象。它是一个 WIRE集合,跨越多个瓦片,物理和电气 连接在一起。节点可以连接到单个SITE_, 而是简单地将NETs携带进、携带出或携带穿过站点。节点可以连接到 任何数量的PIP,并且也可以…

基于QT5.12.7的VTK8.2下的VS2015 X64源码编译以及测试

有一段时间没更新博客了,最近在考虑使用VTK作为软件的后处理显示,相比于OSG,VTK在后处理上集成了很多优秀的算法,使用起来比较方便,而且后处理一般不需要太多的交互,所以VTK是一个不错的选择。 之前对VTK了…

【多视图感知】BEVFormer: Learning Bird’s-Eye-View Representation

BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers 论文链接:http://arxiv.org/abs/2203.17270 代码链接:https://github.com/fundamentalvision/BEVFormer 一、摘要 本文提出了一种名为BEVFormer的新框架&am…

Android基础-如何获取通话状态

在Android系统中,获取通话状态是开发通信类应用时常见的需求之一。通话状态的获取有助于应用程序在特定情况下执行相应的操作,如调整音量、显示特定界面或执行其他与通话相关的任务。下面将详细阐述在Android中如何获取通话状态,内容将包括所…

数据库-数据定义和操纵-DDL语言的使用

创建一个数据库: create database 数据库名; 选择数据库: use 数据库名; 创建表 create table 表名( ); 添加字段; ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件] [FIRST|AFTER 已存在字段名] ; 删除字段: ALTER TABLE 表…

智慧班牌系统源码,智慧校园云平台系统,基于小程序原生开发的智慧校园小程序源码

智慧班牌系统,也被称为电子班牌系统,是一款专为学校打造的信息化产品,用于加强学校班级文化建设和班级风采展示。该系统通过整合学校对外宣传、日常互动交流、教师教学办公、课外学习延伸、智能硬件接入等各种服务,为老师、家长、…

数据库原理(数据库设计)——(3)

一、数据库设计概述 1.数据库设计的基本任务和目标 基本任务 根据用户的信息需求、数据库操作需求,设计一个结构合理、使用方便、效率高的数据库。 设计目标 满足用户的应用要求;准确模拟现实世界;能背某个DBMS(数据库管理系统…

使用超声波麦克风阵列预测数控机床刀具磨损

预测性维护是使用传感器数据来推断机器状态,并从这些传感器数据中检测出在故障发生之前存在的缺陷或故障的过程。预测性维护在所有工业领域都是一种日益增长的趋势,包括轴承故障检测、齿轮磨损检测或往复式机器中的活塞磨损等许多其他例子。在预测性维护…

产品经理的未来在哪里?

【同学聚会】 医生说:你生病的话可以找我。 老师说:你孩子成绩不好时找你辅导。 律师说:你遇上官司时我帮你。 程序员说:你电脑坏了时我帮你修理。 产品经理说:我……好像无一技之长。(瞬间开始怀疑人…

Selenium WebDriver - 其它

一、上手 如果您是Selenium的新手,我们有一些资源可以帮助您立即了解最新情况。 Selenium通过使用WebDriver支持市场上所有主要浏览器的自动化。 WebDriver是一种API和协议,它定义了一个语言中立的界面,用于控制Web浏览器的行为。 每个浏览…

PV180R1K1T1NMMC派克通轴传动结构柱塞泵

PV180R1K1T1NMMC派克通轴传动结构柱塞泵 派克柱塞泵的结构组成部分:柱塞、手把、斜盘、压盘、滑履、泵体、配油盘、传送轴。其优点如下: 1、结构紧凑耐用,具有灵活的安装接口 2、安静的工作 3、效率高 4、降低功耗和减少发热 5、具有“…

【C语言】函数指针变量,函数调用函数

这一期文章来通过示例代码说明一下函数指针变量的定义, 主要讲解使用示例代码。(因为确实太干了所以封面凑的) C语言中, 函数指针变量的一般的定义方法是 返回类型 (*指针变量名)(参数列表), 例如 int (*func)(int, int)下面我们定义一个函数&#xff…

最适合程序员的编程字体,漂亮、独特、优雅!(2024-06-17)

Monaco Monaco 字体是一款专为编程和代码编辑设计的等宽字体,以其简洁明了的无衬线设计风格、高可读性和清晰的字符区分度,受到开发者们的青睐,Mac 自带 Monaco 字体。 Consolas Consolas 是一款等宽无衬线字体,专为编程和代码编…

ElementPlus国际化(将组件的默认语言改为中文)

文章目录 1. Element-plus的默认语言2. 编辑 main.js 文件3. 效果(以分页条组件为例) 1. Element-plus的默认语言 Element-plus的默认语言是英语,可修改为其它语言 2. 编辑 main.js 文件 import {createApp} from vue import ElementPlus …

高等数学笔记(一):映射与函数

一、映射 1.1 映射的概念 存在一个法则 f ,使得对 X 中每个元素 x ,在 Y 中有唯一确定的元素 y 与之对应(X、Y 非空集) 称 f 为从 X 到 Y 的映射,如图所示 其中 y 称为元素 x(在映射 f 下)的…

理解并应用:JavaScript响应式编程与事件驱动编程的差异

背景介绍 在现代JavaScript开发中,响应式编程(Reactive Programming)和事件驱动编程(Event-Driven Programming)是两种非常重要且常用的编程范式。虽然它们都用于处理异步操作,但在理念和实现方式上存在显…

如何用多线程执行 unittest 测试用例实现方案

前言 使用python做过自动化测试的小伙伴,想必都知道unittest和pytest这两个单元测试框架,其中unittest是python的官方库,功能相对于pytest来要逊色不少,但是uniitest使用上手简单,也受到的很多的小伙伴喜爱。一直以来都…