フォルダ内の画像ファイルにウォーターマーク(すかし)をつける
フォルダ内の画像ファイルにウォーターマーク(すかし)をつけます。半透明のウォーターマークをつけるために元画像とウォーターマークをアルファブレンドします。
まずPillowで元画像をRGBA色空間に変換します。同じサイズのRGBA画像をA=0つまり透明で用意しその上にウォーターマークになる文字をAを255より小さく(すかして)描きます。2つの画像をアルファブレンドして透かし入り画像にします。
関連記事
環境
- windows10 home
- jupyter notebook 6.3.0
- Python 3.8.8
- Pillow 8.2.0
準備
画像ファイルはフリー写真素材ぱくたそから3つの画像をダウンロードさせていただき、jupyter notebookファイル(.ipynb)と同じディレクトリに、フォルダ'pics'を作りその中にファイル名'cat1.jpg','cat2.jpg','cat3.jpg'で保存しました。 また、ウオーターマーク付き画像の保存先としてjupyter notebookファイル(.ipynb)と同じディレクトリに、フォルダ'watermark'を作成しました。
cat1.jpg
cat2.jpg
cat3.jpg
コード
フォルダ'pics'内の画像を一つずつ読み出し、RGB色空間からRGBA色空間に変換します。読み出した画像と同じサイズの白ベタ画像をRGBA色空間で作成し、α値を0、つまり100%等価にします。その透明画像の上に'猫の写真'、'「フリー写真素材ぱくたそ」より'の文字をα値128、つまり透過度50%で描き、画像とアルファブレンドすることでウォーターマークを付けます。
import os from PIL import Image, ImageDraw, ImageFont # フォルダ'pics'内のファイル取得 files = os.listdir('pics/') for i in files: # 画像を読み出してRGBA色空間に変換 base = Image.open('pics/'+i).convert('RGBA') # 文字描画用画像。読み込んだ画像と同じサイズの空画像。RGBA色空間で文字と同色、透過度100%(透明) txt = Image.new('RGBA', base.size, (255,255,255,0)) # フォントの設定 fnt1 = ImageFont.truetype('C:\Windows\Fonts\meiryo.ttc', int(base.size[0]/5)) fnt2 = ImageFont.truetype('C:\Windows\Fonts\meiryo.ttc', int(base.size[0]/20)) # 画像コンテクストの設定 d = ImageDraw.Draw(txt) # 文字を文字描画用画像に半透明で描画 color = (255,255,255,128) # 文字の透過度50% d.text((int(base.size[0]*0.1),(int(base.size[1]*0.2))), '猫の写真', font=fnt1, fill=color) d.text((int(base.size[0]*0.1),(int(base.size[1]*0.7))), '「フリー写真素材ぱくたそ」より', font=fnt2, fill=color) # 元画像と文字画像のアルファブレンド out = Image.alpha_composite(base, txt) # 重ね合わせた画像の保存 out.save('watermark/'+i.split('.')[0]+'.png')
実行結果
'猫の写真'、'「フリー写真素材ぱくたそ」より' の透かし文字が入った画像が保存されました。
cat1.png
cat2.png
cat3.png
以下のサイトを参考にさせていただきました
Pillow >> Example: Draw Partial Opacity Text