分享

使用Python给图片添加水印

 hercules028 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转换为PNGPython可以为图像添加所需的透明度
虽然PNG文件和JPG文件之间有一些不同,但我们主要关注的是图像的透明度特征。图像透明度基本上是指图像是否可以透过。
让我们将两个图像文件加载到Python中。这是相同的图像,但格式不同,一个是PNG,另一个是JPG。让我们看看这两个图像文件之间的差异。
Image
1
对于计算机来说,图像文件基本上是一组数字。将这两个图像文件加载到NumPy数组将有助于可视化这个概念。
示例PNGJPG图像的大小均为1100 x 1100像素。然而,shape属性中的最后一个数字不同:JPG3,而PNG4。让我们显示numpy数组以查看差异。
每个数组内的值表示每个像素的颜色。例如,在PNG文件中,[255,255,255,255]表示白色但完全不透明。而在JPG文件中,[255,255,255]表示白色的像素。
Image
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图像。注意,参数内部的范围可以是0255。值为0表示完全透明,即我们不会看到任何东西;255表示不透明。这里选择了数值180,这样我们的水印图像将有点半透明。
Image
3
此时图片的像素数组值如下图4所示。
Image
4
这张图片还有一个问题——它的背景是白色的。通常,PNG文件的背景是透明的。我们可以通过将图像上所有白色像素的alpha通道设置为0(透明)来删除白色背景。
换句话说,对于每个RGB值为[255,255,255,180]的像素,我们将alpha通道设置为0,以使像素完全透明。
由于我们已经将图像的RGBA值放入Numpy数组中,因此操纵颜色很容易。为了找到所有白色的像素,可以创建一个掩码,其中白色像素=True,否则为False。下面的代码检查图像的每个像素的所有RGB值是否等于255。注意,transparent_watermark[:,:,0]仅返回所有1100×1100像素的第一个元素(即“R”的整数值)的数组。
然后,我们为满足标准的像素赋新值[255,255,255,0]。这一步有效地将所有白色像素变为完全透明。
Image
5
可以使用PIL库的Image.fromarray()方法将NumPy数组转换回图像文件。
watermark_final = Image.fromarray(transparent_watermark)
使用Python给图片文件添加水印
现在,我们已经完成了准备Logo图像,是时候将其作为水印添加到基础图像中了。我们首先将水印图像的大小调整为基础图像的1/5,当然也可以使用另一种适合你需要的大小。
Image
6
然后,将创建一个与基础图像大小相同的空“画布”,并将此画布设置为处处透明。
transparent = Image.new(mode='RGBA',size = (width,height), color=0)
设置画布后,将1)粘贴基础图像,2)将水印图像粘贴在基础图像的顶部。如下所示,Image.paste()方法有三个参数:
1.im–源图像
2.box–粘贴图像的起点(左上角)的(xy)坐标
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所示。
Image
7
注:本文学习整理自pythoninoffice.com,供有兴趣的朋友学习参考。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多