画像を少し暗転させて、透かし文字を入れるプログラムを書いた(Python3)

f:id:sakage24:20170805222605p:plain
f:id:sakage24:20170805222614g:plain
f:id:sakage24:20170805222616g:plain

ググった限り、そういうWebサービスもあるみたいなのですが、一つ一つ画像投げて待機してダウンロードして…というのもしんどいので、スクリプトを書くことにしました。

自分自身、著作権保護…っていうほどの絵を書いているとは思いませんが、他の方のブログを拝見するに、余計なトラブル防止の為にも、やはりある程度の自己防衛は必要なのかな…と思います。

追記: Vectorさんに登録させて頂きました~

http://www.vector.co.jp/soft/winnt/art/se516536.html

ソースコード

とりあえず、退屈なことはPythonにやらせようの精神で、Pythonちゃんを使って書きました。sourcesフォルダ内の全ての画像ファイル(jpg, jpeg, png, gif)に透かしを入れてdestフォルダに同名かつ、拡張子を.png形式に変換した画像を新規作成します。


# sukashi.py
from PIL import Image, ImageFont, ImageDraw
import os
import sys
# 変換元フォルダ
sources_dir = "miko"
# 変換先フォルダ
dest_dir = "dest"
# 透かし文字
text = "www.kiwi-bird.xyz"
# 文字色
text_color = "gray"
# 使用するフォントファイル
fonts = "arial.ttf"
# 文字サイズ
font_size = 12
# 透かしの色と明度
img_color = (0, 0, 0, 160)
# 検索する画像の拡張子
ext_lists = ("jpg", "jpeg", "png", "gif")
if not os.path.exists(sources_dir):
os.mkdir(sources_dir)
input(f"{sources_dir}フォルダを作成しました。この中に画像を放り込んでから再度起動して下さい。")
sys.exit(0)
elif not os.listdir(sources_dir):
input(f"{sources_dir}フォルダ内にファイルが存在しません。この中に画像を放り込んでから再度起動して下さい。")
sys.exit(0)
if not os.path.exists(dest_dir):
os.mkdir(dest_dir)
for file in os.listdir(sources_dir):
root, ext = os.path.splitext(file)
if ext[1:] in ext_lists:
img = Image.open(os.path.join(sources_dir, file)).convert("RGBA")
width, height = img.size
# 文字の座標("横(px)", "縦(px)")
text_position = (0, height / 2)
img_object = Image.new("RGBA", img.size, color=img_color)
draw = ImageDraw.Draw(img_object)
arial_font = ImageFont.truetype(fonts, font_size)
draw.text(xy=text_position, text=text, fill=text_color, font=arial_font)
output = Image.alpha_composite(img, img_object)
output.save(os.path.join(dest_dir, root) + ".png")
else:
print(f"{file}は画像ではありません。パスします。")

使い方

前提条件

python3がインストールされていること

最新版(3.6.X…)をインストールして下さい。インストールする際はadd to PATH的な項目にチェックを入れないと面倒なことになるかもしれません…

pillowがインストールされていること
>pip freeze
Pillow==4.2.1

インストールされていない場合は下記のコマンドを入力すること

pip install pillow

手順

  1. 上記のソースコードをコピーして、sukashi.pyとして保存する
  2. プログラムを実行する、もしくは手動でsourcesフォルダを作成する。その中に変換元のファイルを入れること
  3. sukashi.pyを実行する

注意事項

試してみたのですが日本語入力すると文字化けしますね。とりあえずは半角英数字のみ入れて下さい。後々修正します(やらないパターン)。あと、文字サイズは私の用途である横96 × 縦128のサイズに最適化してありますので、大きな画像だと小さすぎてなんにも見えないかもしれません。変更したい場合は

font_size = 12

の数値を適当に弄ってみて下さい。

透かし文字の位置は縦のサイズ÷2 × 横のサイズの0px目から埋め込んでいます。これも私の用途に最適化しているので、お手数ですがご自身で適当に変更して下さい(ぶん投げ)。

# 文字の座標("横(px)", "縦(px)")
text_position = (0, height / 2)

の部分が透かし文字の位置についての記述になります。上記の(0, height / 2)を、(width / 2, height / 2)とかにすると、ちょうど中央から透かしを入れるはずです。

# 文字の座標("横(px)", "縦(px)")
text_position = (width / 2, height / 2)

さすがはスクリプト言語。ユーザ側でコードの変更を強いる事が出来る…w

終わり

Pythonは本当に便利です。特にこういう手順の決まりきったルーチンワークは、全て自動化という選択肢が取れるのが本当に良いです。

皆さんも普段意識していないけど、毎日やっている作業って無いですか?毎日15分掛けて行っていた作業、もしかしたらPythonが2秒で終わらせてくれるかもしれませんよ!!

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

入門 Python 3

入門 Python 3

コメントを残す

メールアドレスが公開されることはありません。