图片加上 logo 浮水印
这篇文章会介绍使用 Python 的 Pillow 第三方函数库,将图片加上 logo 浮水印 ( 使用图片作为浮水印 ),并尝试做出半透明的浮水印效果,最后还会搭配 glob 函数库,实现批次加浮水印的功能。
- 本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
- 使用 Colab 操作需要连动 Google 云端硬盘,请参考:连动 Google Drive
安装 Pillow
输入下列指令安装 Pillow,根据个人环境使用 pip 或 pip3,如果使用 Colab 或 Anaconda Jupyter,已经内建 Pillow 函数库。
!pip install Pillow
准备浮水印的图片
图片浮水印是使用一张“背景透明”的图片作为浮水印,支援背景透明图片的常见格式有 png、gif、svg,考量支援度与色彩深度,通常会使用 png 的图片,下方准备了两张图,一张是背景照片 photo,一张是作为浮水印的 icon ( 背景透明的爱心 ),可先行下载到电脑中。
贴上浮水印
加载 Pillow 函数库的 Image 模组,分别将两张图片打开为 img 和 icon,接着使用 paste 方法,将 icon 贴到 img 上方,存档后就会看到风景图上出现爱心的浮水印,paste 方法有三个参数,第一个参数为要贴上的图片,第二个参数为贴上的座标位置 ( 左上角 ),第三个参数为遮色片,当遮色片与第一个参数为同一张图,就会采用原图的 alpha 遮罩设定,因此如果原图已经是去背的图片,就会将背景变成透明 ( 如果没有设定,透明的位置会是全黑或全白 )。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from PIL import Image
img = Image.open('./watermark-photo.jpg') # 開啟風景圖
icon = Image.open('./oxxostudio-icon.png') # 開啟浮水印 icon
img.paste(icon, (0,0), icon) # 將風景圖貼上 icon
img.save('./ok.jpg') # 存檔為 ok.jpg
# img.show() # Colab 不支援直接顯示,如果使用本機環境會開啟圖片檢視器
如果要将 icon 置中,可以透过两张图片尺寸的换算,就能计算出置中时 icon 左上角的座标位置。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from PIL import Image
img = Image.open('./watermark-photo.jpg')
icon = Image.open('./oxxostudio-icon.png')
img_w, img_h = img.size # 取得風景圖尺寸
icon_w, icon_h = icon.size # 取得 icon 尺寸
x = int((img_w-icon_w)/2) # 計算置中時 icon 左上角的 x 座標
y = int((img_h-icon_h)/2) # 計算置中時 icon 左上角的 y 座標
img.paste(icon, (x, y), icon) # 設定 icon 左上角座標
img.save('./ok.jpg')
同理,只要改变计算的公式,就能将 icon 摆放在右下角的位置。
x = int(img_w-icon_w) # 計算 icon 在右下的 x 座標
y = int(img_h-icon_h) # 計算 icon 在右下的 y 座標
搭配 glob,批次加浮水印
了解加入浮水印的方法后,使用 glob 标准函数库读取 demo 文件夹里所有的 jpg 文件,就能批次加入浮水印。
- 参考:for 循环、拆分字串 split
- 图片来源:爬取并自动下载 PTT 正妹图片
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import glob
from PIL import Image
imgs = glob.glob('./demo/*.jpg') # 讀取 demo 資料夾裡所有的圖片
icon = Image.open('./oxxostudio-icon.png')
for i in imgs:
name = i.split('/')[::-1][0] # 取得圖片名稱
img = Image.open(i) # 開啟圖片
img.paste(icon, (0,0), icon) # 加入浮水印
img.save(f'./demo/watermark/{name}') # 以原本的名稱存檔
调整浮水印透明度
由于 PIL 里调整透明度的 putalpha 方法,会调整 RGBA 里的 A ( alpha ) 色版数值,如果作为浮水印本身是去背的图片,会造成去背的部分也受到影响 ( 因为去背位置的像素包含了 alpha 信息 ),因此如果要做到半透明的浮水印,可以先产生一张完全不透明的图 ( 有浮水印的 ),然后再调整这张图的透明度,与原本没有浮水印的图结合,就会产生半透明的浮水印效果。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from PIL import Image
img = Image.open('./watermark-photo.jpg') # 準備合成浮水印的圖
img2 = Image.open('./watermark-photo.jpg') # 底圖
icon = Image.open('./oxxostudio-icon.png')
img_w, img_h = img.size
icon_w, icon_h = icon.size
x = int((img_w-icon_w)/2)
y = int((img_h-icon_h)/2)
img.paste(icon, (x, y), icon) # 合成浮水印
img.convert('RGBA') # 圖片轉換為 RGBA 模式 ( 才能調整 alpha 色版 )
img.putalpha(100) # 調整透明度,範圍 0~255,0 為全透明
img2.paste(img,(0,0),img) # 合成底圖
img2.save('./ok.jpg')
小结
如果要对自己的图片进行保护,加入浮水印是个不错的做法,透过这个范例,就能自己做出批次加入浮水印的程序。
微信扫码关注
抖音扫码关注