画像に透かしを追加する【Python】

Pocket

このサイトのサブディレクトリに自分の写真を載せるフォトギャラリー的なサイトを作っているのですが、その写真に透かしを自動で追加できるようになったら楽だな―と思ったのでpythonで作成。

ついでにそのサイトのリンクsunfish record -photo gallery-

このファイルが置いてあるフォルダの中に透かしを追加したい画像をinputというフォルダに追加。

透かしを追加した画像を出力する場所の指定のためこのファイルが置いてあるフォルダの中にoutputというフォルダ作成。

フォントサイズや透かしの透明度、フォント、透かしを追加する場所は適当に調整。

from PIL import Image, ImageDraw, ImageFont
import os
import glob

# 透かしで表示したい文字
watermark = '© sunfish record' 
# 透かしのフォントサイズ
fontsize = 200
# 透かしの透明度
opacity = 80
# 透かし文字の色
color = (255, 255, 255)

# 透かしを追加したい画像を格納したフォルダ名
inputFolder = "input"
# 透かしを追加した画像の出力先のフォルダ名
outputFolder = "output"

# inputフォルダにある全てのJPGファイルを取り込んで編集
i = 1
for path in glob.glob(os.path.join(inputFolder, '*.JPG')):
    base = Image.open(path).convert('RGBA')

    txt = Image.new('RGBA', base.size, (255, 255, 255, 0))
    draw = ImageDraw.Draw(txt)

    # あらかじめどっかからダウンロードしたフォント(ここではInk Free)を指定
    fnt = ImageFont.truetype(font='Ink-Free-Font/InkFree.ttf', size=fontsize)

    textw, texth = draw.textsize(watermark, font=fnt)

    # 透かし文字右下
    # 写真のサイズを取得してそれぞれの画像に応じた場所に配置
    draw.text((base.width - 1600, base.height - 300), watermark, font = fnt,  fill= color + (opacity,))

    out = Image.alpha_composite(base, txt)
    # この状態だとpngで出力される、
    # 今回はjpgで出力するように変換(pngで出そうとするとめっちゃ時間かかる)
    jpgOut = out.convert('RGB')

    # アウトプット先に指定したフォルダにWMoutput~~っていうファイル名で出力される
    jpgOut.save(outputFolder + '/WMoutput' + str(i) + '.JPG', quality=100, optimize=True)
    print(str(i) + '回目の処理完了')
    i+=1

ちなみにこの設定でcanon powershot g7x mark2で撮影した画像に透かしを追加した場合

pixel4aで撮影した画像に透かしを追加した場合

画像のサイズによって画像上のフォントのサイズが変わるから、機材に応じてフォントサイズとか調整したほうがいいかも。

上の2つくらいならそんなに気にならないけど。

フォントの色とかサイズ、透かしの場所なんかもしきい値とか使って自動で変更するようにするか、設定ファイル作って、設定を変えるようにした方が良い気がするけど、そんなに影響ないから取りあえずはこれでいいかなと。

備考

ちなみにWordPressで透かしを追加するプラグインとかないのかと思って調べたら、Image Watermarkというプラグインがあった。

フォントは指定できないみたいなのが難点だけど、今アップロードしている画像にわざわざ透かし追加してまたアップロードするの面倒だからこれでもいいかなと。

画像に透かしを追加する【Python】」への1件のフィードバック

コメントは停止中です。