打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
使用Python给图片添加水印
hercules028
>《Python and AI》
2022.07.13 四川
关注
本文介绍如何使用
Python
给图像添加水印(文本或图片)。前面,我们已经学习了:
使用Python批量给图片添加文本
这里,尝试给图片添加
Logo
和文本。
库
这里需要使用
Pillow
库(
Python Imaging Library
),使用
pip
命令安装:
pip install Pillow
注意,要导入
Pillow
库,需要使用:
import PIL
而不是:
import Pillow
准备水印图片(
logo
)
向图像中添加水印,基本上是将一张图像(水印)放置在另一张图像的顶部。能够控制
logo
图像的透明度将有助于使最终生成的图像看起来更好。因此,最好使用支持图像透明度的
PNG
文件格式的水印图像。
如果水印文件是
JPG/JPEG
格式,不要担心。我们也不会使用一些转换器将
JPG
转换为
PNG
。
Python
可以为图像添加所需的
“
透明度
”
。
虽然
PNG
文件和
JPG
文件之间有一些不同,但我们主要关注的是图像的透明度特征。图像透明度基本上是指图像是否可以透过。
让我们将两个图像文件加载到
Python
中。这是相同的图像,但格式不同,一个是
PNG
,另一个是
JPG
。让我们看看这两个图像文件之间的差异。
图
1
对于计算机来说,图像文件基本上是一组数字。将这两个图像文件加载到
NumPy
数组将有助于可视化这个概念。
示例
PNG
和
JPG
图像的大小均为
1100 x 1100
像素。然而,
shape
属性中的最后一个数字不同:
JPG
是
3
,而
PNG
是
4
。让我们显示
numpy
数组以查看差异。
每个数组内的值表示每个像素的颜色。例如,在
PNG
文件中,
[255,255,255,255]
表示白色但完全不透明。而在
JPG
文件中,
[255,255,255]
表示白色的像素。
图
2
前三个整数值(如上图
2
左侧所示)是
RGB
(红色、绿色和蓝色)值,
PNG
数组中的第四个整数称为
“alpha
通道
”
,它控制透明度(因此命名为
“RGBA”
)。如上图
2
所示,
PNG
支持透明度(即
alpha
通道),但
JPG
没有。
这里需要注意:
1.RGB
的值为
255
表示每种颜色的最大值。将所有三个值设为最大值
(255,255,255)
基本上是白色。
2.alpha
通道的值为
255
表示不透明;而
alpha
值为
0
表示完全透明。
Pillow
库使
JPG
文件转换为
PNG
格式变得非常容易。我们可以使用
putalpha()
方法将
alpha
通道(即第四个整数)添加到
JPG
图像。注意,参数内部的范围可以是
0
到
255
。值为
0
表示完全透明,即我们不会看到任何东西;
255
表示不透明。这里选择了数值
180
,这样我们的水印图像将有点半透明。
图
3
此时图片的像素数组值如下图
4
所示。
图
4
这张图片还有一个问题——它的背景是白色的。通常,
PNG
文件的背景是
“
透明的
”
。我们可以通过将图像上所有白色像素的
alpha
通道设置为
0
(透明)来
“
删除
”
白色背景。
换句话说,对于每个
RGB
值为
[255,255,255,180]
的像素,我们将
alpha
通道设置为
0
,以使像素完全透明。
由于我们已经将图像的
RGBA
值放入
Numpy
数组中,因此操纵颜色很容易。为了找到所有白色的像素,可以创建一个掩码,其中白色像素
=True
,否则为
False
。下面的代码检查图像的每个像素的所有
R
、
G
和
B
值是否等于
255
。注意,
transparent_watermark[
:,:,
0]
仅返回所有
1100×1100
像素的第一个元素(即
“R”
的整数值)的数组。
然后,我们为满足标准的像素赋新值
[255,255,255,0]
。这一步有效地将所有白色像素变为完全透明。
图
5
可以使用
PIL
库的
Image.fromarray()
方法将
NumPy
数组转换回图像文件。
watermark_final = Image.fromarray(transparent_watermark)
使用
Python
给图片文件添加水印
现在,我们已经完成了准备
Logo
图像,是时候将其作为水印添加到基础图像中了。我们首先将水印图像的大小调整为基础图像的
1/5
,当然也可以使用另一种适合你需要的大小。
图
6
然后,将创建一个与基础图像大小相同的空“画布”,并将此画布设置为处处透明。
transparent = Image.new(mode='RGBA',size = (width,height), color=0)
设置画布后,将
1
)粘贴基础图像,
2
)将水印图像粘贴在基础图像的顶部。如下所示,
Image.paste()
方法有三个参数:
1.im–
源图像
2.box–
粘贴图像的起点(左上角)的
(x
,
y)
坐标
3.mask-
遮罩
/
过滤器,有助于从粘贴的图像中去除所有透明像素
transparent.paste(img)
wm_position = (int(3/4*width), int(3/4 * height))
transparent.paste(im=watermark_final, box=wm_position, mask=watermark_final)
现在,已经成功地将一张
JPG
格式的水印添加到另一张图片上,如下图
7
所示。
图
7
注:本文学习整理自
pythoninoffice.com
,供有兴趣的朋友学习参考。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
摄影后期输出时常用的几种存储格式
超实用的图片处理技巧分享
详细解读:MIT经典的语义分割数据集ADE20K
使用OpenCV实现图像覆盖
你知道图片保存格式都有哪些么?
ImageMagick简介、GraphicsMagick、命令行使用示例
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×