「Python|场景案例」如何给图片添加水印

news2024/9/24 17:16:19

本文主要介绍如何使用python的PIL库给图片增加水印

文章目录

  • 背景说明
  • 工具准备
  • 处理步骤
  • 源代码
  • 处理效果展示

背景说明

  • 当我们想给一些图片添加水印的时候,尤其是图片数量较多的时候,就可以使用python进行自动化处理。
  • 包括但不限于在自媒体上发布自己的各种画稿、摄影作品、宣传作品等等。

工具准备

  • 使用如下pip命令安装所需要的python第三方库PIL:
    python3 -m pip install --upgrade Pillow

  • 到谷歌字体下载我们希望使用的水印字体到本地

  • 本案例使用Explora字体,字体文件放在E:/目录下

  • 准备一张要添加水印的图片,本案例使用以下图片,图片同样放在E:/目录下

在这里插入图片描述

处理步骤

通过python给图片增加水印的步骤如下:

  • 打开我们所需要添加水印的图片
  • 在图片上增加一层蒙版(或者说画布好理解一些?)
  • 在画布上增加我们想要添加的水印内容,包括但不限于
    • 文本
    • 颜色
    • 字体
    • 透明度
  • 保存图片

源代码

from PIL import Image, ImageDraw, ImageFont

"""
对应步骤一: 打开图片
由于需要设置透明度, 所以需要图片需要从默认的RGB模式转换成RGBA模式
"""
image_to_process = Image.open('E:/brooch.png').convert("RGBA")


"""
对应步骤二: 在图片上创建一个画布
后续的添加水印就是在带有画布的图片上进行
需要注意的是, 这相当于在图片上贴了了一层画布, 我们的内容是写在画布上, 然后内容会"渗"到图片上
所以我们最终要保存的是图片, 而不是画布
"""
image_could_be_drawed = ImageDraw.Draw(image_to_process)


"""进行步骤三之前,准备好要添加的水印内容"""
"""文本"""
text = "A K I R A"
"""字体, 加载之前下载好的字体, 并设置字体大小为128"""
font = ImageFont.truetype("E:/Explora-Regular.ttf", 128)
"""
水印内容放在图片中的哪个位置
这里通过image_to_process.size获取图片大小, 这里是(1024, 1024)
然后除以2, 使得水印内容从正中间开始
由于是从正中间开始写水印文本, 所以水印位置是中间偏右
"""
location = tuple(location // 2 for location in image_to_process.size)
"""字体颜色, RGBA"""
fill_color_RGBA = (254, 223, 225, 179)

"""对应步骤三: 将水印内容怼到图片上"""
image_could_be_drawed.text(location, text, font=font, fill=fill_color_RGBA)

"""让图片显示出来, 看看效果"""
image_to_process.show()

"""对应步骤四: 保存图片到本地"""
image_to_process.save('E:/image_withmark.png')

以上就是给图片增加水印的处理,需要批量处理的时候,如下循环操作即可:

import os

all_images = os.listdir("E:/images/")
for image in all_images:
	"""执行上述代码的操作即可"""

处理效果展示

本案例中处理完的图片效果如下:
在这里插入图片描述

好书推荐:

  • 流畅的python
  • Python编程 从入门到实践 第2版
  • Python数据结构与算法分析 第2版

好课推荐:

  • 零基础学python
  • python核心技术与实战
  • python自动化办公实战

写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇

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

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

相关文章

如何使用自助式商业智能 (BI) 避免组织中的数据孤岛

许多组织都存在数据问题。当许多员工远程工作(或在混合环境中)并在多个位置使用多个设备访问公司数据时,他们正在处理信息过载问题。这只会加剧数据孤岛的问题。 数据孤岛正是它听起来的样子:孤立在一个孤立的用户/环境中的数据&…

jdk版本和Class编译版本对应关系

JDK version和class file version(Class编译版本号)对应关系 JDK 17 61, JDK 16 60, JDK 15 59, JDK 14 58, JDK 13 57, JDK 12 56, JDK 11 55, JDK 10 54, JDK 9 53, JDK 8 52, JDK 7 51, JDK 6.0 50, JDK 5.0 …

数据结构-归并排序

一、概念及其介绍 归并排序(Merge sort)是建立在归并操作上的一种有效、稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每…

三年“云改”,移动云这份答卷有多“硬”?

作者 | 曾响铃 文 | 响铃说 云计算是推动数字经济与实体经济深度融合的催化剂,是重点领域数字产业发展的助推器。近年来我国云计算产业发展提速,加快推动实体企业转型升级和创新发展。 2022年是移动云实施“云改”战略的第3年,也是移动云全…

【人工智能】基于五笔字型规范和人工神经网络的简中汉字识别【二】

环境搭建 一、NVIDIA驱动安装与更新二、Anaconda安装三、Pytorch安装四、验证CUDA和cudnn版本一、NVIDIA驱动安装与更新 显卡驱动就是用来驱动显卡的程序,它是硬件所对应的软件。 正常情况下,配有显卡的电脑都是安装有驱动程序的,但是有的时候驱动可能版本较低,所支持的 …

爬虫内容学习-工具类---Selenium

一、爬虫学习建议: 在编写python爬虫程序时,只需要做以下两件事: 发送GET请求,获取HTML [第一类] 解析HTML,获取数据 [第二类] 这两件事,python都有相应的库帮你去做,你只需要知道…

关乎你我,2022年都经历了哪些安全事件?|上云那些事

2022年,网络安全跟人们的工作生活关联愈发紧密。腾讯安全联合南方日报、南方,携手共建《上云那些事》栏目,为企业提供网络安全建设新思路,帮助大家及时发现身边的网络安全陷阱,提升安全意识和防范能力,减少…

论文阅读-虚假信息检测综述 - Fake News Detection on Social Media: A Data Mining Perspective

论文链接:https://arxiv.org/pdf/1708.01967.pdf 目录 摘要 1 引言 2. 假新闻定义 2.1 假新闻的定义 2.2 传统新闻媒体上的假新闻 2.3社交媒体上的假新闻 3.假新闻检测 3.1问题定义 3.2 特征提取 3.2.1 新闻内容特征 3.2.2 社会语境特征 3.3 模型构建 …

浅谈DNS域名解析的过程

用户在浏览器输入www.baidu.com时,DNS域名解析大致分为以下几个过程: 浏览器客户端检查自身有没有该域名的缓存: 如果浏览器有命中,直接返回该域名对应的IP地址,解析结束; (这个缓存可以设置TTL来控制有效时间,有点像A…

用C++求两个数的最大公约数和最小公倍数。(数论的基础思想)

目录原理最大公约数最小公倍数代码运行结果原理 最大公约数 有两个数字n和m。现在要求两个数字的最大公约数。 例如:n为18,m为4. 正常我们的思路求解最大公约数是暴力破解,遍历一遍公约数,取最大的那个,但是这样有一…

关闭Mac的Microsoft AutoUpdate弹框提示

macOS安装Microsoft Office for Mac之后,有时候会弹出Microsoft Auto Update微软应用自动更新工具。就像下面这样:(我不知道您会不会烦,我是烦了) 如果您也和我一样,不喜欢这样不经过允许就自动弹框的提示&…

【uiautomator2】 Android自动化测试框架

UiAutomator是Google提供的用来做安卓自动化测试的一个Java库. Uiautomator工作流程 1.在移动设备上安装atx-agent(守护进程),随后atx-agent启动uiautomator2服务(默认7912端口)进行监听 2.在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端) 3.移动设备通过Wi…

python import失败解决方案

错误从何而起? 此时有这么一个目录结构 我们从a/b下执行python.exe ./main.py命令开始 案例: a/b/main.py导入a/package if __name__ "__main__":# 报错 ModuleNotFoundError: No module named packageimport package # 报错 ImportError: attempted relative…

Netty网络编程 - NIO基础

一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 st…

时间序列分析之auto_arima自动调参

背景 我们在进行ARIMA建模时,有一个非常重要的事情就是确定其中超参数p, d, q。 一般的流程需要先根据平稳性来确认差分的阶数d,然后根据平稳序列来观察ACF图和PACF图来确认p和q,当然中间还要根据网格训练查看AIC的值来确认,真个…

软件设计模式-行为型模式

行为型模式 行为型模式是对在不同的对象之间划分责任和算法的抽象化通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。在系统运行时,对象并不是孤立的,他们可以通过相互通信与协作完成某…

数据赋能的未来,看向嵌入式BI

数据分析能力越来越成为消费者和企业的必备品应用程序,复杂程度各不相同,从简单地一个网页或门户上托管一个可视化或仪表板,到在一个云服务上实现数据探索、建模、报告和可视化创建的应用程序。BI的实现方式越来越多,无论规模大小…

南京晓庄操作系统期末复习【大题】

操作系统期末复习大题第六章磁盘调度寻道时间与移动次数转换I/O中断请求第五章地址转换页面置换第四章动态分区地址转换第三章银行家算法处理机调度算法第二章进程同步第一章多道运行时间第六章 磁盘调度 前提小知识: 1.先来先服务(FCFS):…

ros版本apollo7.0.0规划控制算法

apollo.ros-7.0.0 上次给大家带来了之前学习apollo时开发的内容apollo.ros-1.0.0和apollo.ros-3.0.0,主要是针对apollo 1.0.0和3.0.0版本进行了ros1下的移植和规划控制算法的学习。本次在之前工作的基础上,针对apollo 7.0.0版本,进行了ros1下…

第二章:Linux常见指令以及权限理解

系列文章目录 文章目录系列文章目录前言一、Linux下基本概念指令操作操作系统的概念命令选项文件的概念Linux文件结构文件路径Linux下一切借文件二、Linux下基本指令ls: 显示当前目录下的文件名mkdir/rmdir:在当前路径下创建或删除目录pwd: 显…