Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

フォルダ内の画像ファイルにウォーターマーク(すかし)をつける

フォルダ内の画像ファイルにウォーターマーク(すかし)をつけます。半透明のウォーターマークをつけるために元画像とウォーターマークをアルファブレンドします。
まず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
f:id:T_A_T:20210926113933j:plain
cat2.jpg
f:id:T_A_T:20210926114017j:plain
cat3.jpg
f:id:T_A_T:20210926114031j:plain

コード

フォルダ'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
f:id:T_A_T:20210926130720p:plain

cat2.png
f:id:T_A_T:20210926130805p:plain

cat3.png
f:id:T_A_T:20210926130842p:plain

以下のサイトを参考にさせていただきました

Pillow >> Example: Draw Partial Opacity Text

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村