ブログ画像にまとめて透過ロゴを入れる方法

  • 投稿日:
  • 更新日:2015/12/12
  • by
  • カテゴリ:

ブログの画像にロゴを入れてみる

当ブログの写真にはこれまで特にロゴを入れてなかったのですが、思い立って入れてみることにしました。PhotoshopやGIMPといったツールを使えば簡単にできるのは分かっているのですが、画像は既にブログに設定済み。しかも相当の枚数があるため、GUIのツールで1枚づつ処理するのは現実的ではありません。

そのため、バッチでできる方法を調べてみました。

Linux環境上でまとめて処理

いくつか調べてみたのですが、Windowsで出ている様々なフリーツールを使わなくても、Linux環境(私の場合Tiny Core Linux)のImageMagickでどうやらできるっぽいので、その方法を試してみることにしました。通常のLinuxディストリビューションであればImageMagickは使えるので、問題なく適用できると思います。また、シェルスクリプトに関してはMicrocore / TinyCore Linuxのashおよびbashが使えます。

幸い、私はImageMagickを以前CAPTCHAのためにTCZ化してインストールしています

手順1: 合成する画像を用意

まず、写真に合成するための画像を用意します。私は面倒がってPowerPointで作ったものをPNGで保存し、GIMPを使って透過PNG化しました。以下では、それがlogo.pngというファイル名だと仮定します。

作成する画像のサイズは、合成対象の画像より小さいものにしてください。

手順2: ImageMagickで合成

合成する画像(ロゴの入った画像)をlogo.png、対象の画像(写真等)をmypic.jpgだとすると、以下のようにすると合成ができます。

composite -dissolve 30% -gravity southeast logo.png mypic.jpg output.jpg

output.jpgが合成済みの画像です。

compositeはImageMagickのコマンドで、画像合成をするものです。

オプションの-dissolveはどのくらいの不透明さでロゴ画像を埋め込むかを表わし、数字が大きいほうがロゴが強く表れます。

-gravityは対象画像のどこに埋め込むかで、southeastは右下を指定しています。

手順3: まとめて処理

上記だと1ファイルしか処理できないので、これをディレクトリ配下などのファイルでまとめて処理します。

for i in *.jpg; do composite -dissolve 30% -gravity southeast logo.png $i ${i%.jpg}-logo.jpg; done

上のコマンドは、カレントディレクトリにあるjpgファイルを全部変換します。たとえば、mypic.jpgというファイルはmypic-logo.jpgというファイルに変換されます。

変換結果を見て問題なければ、元ファイルをバックアップを取るなりしたうえで上書きしてしまいます。

for i in *-logo.jpg; do mv -f ${%-logo.jpg}.jpg; done

サムネイルの処理

MovableTypeのサムネイルはasset_cというサブディレクトリに保存されていて、そこに様々なサイズでファイルが保存されています。

今回は、その中でもある程度のサイズを持つファイルのみロゴを入れてみました。あまり小さなサムネイルにロゴを入れる意味はないためです。

判断が入るため、シェルスクリプトにしました。

#!/bin/sh
for i in $1/*.jpg; do
  if [ `identify -format "%w" "$i"` -ge 320 ]; then
    composite -dissolve 30% -gravity southeast logo.png $i ${i%.jpg}-logo.jpg
    mv -f ${i%.jpg}-logo.jpg $i
  fi
done

このファイルがconvert.shだとすると、使い方は

$ sh convert.sh <assets_cへのパス>/2015/10

のようになります。2行目のforにより、指定したディレクトリ内にある.jpgファイルすべてが処理の対象です。

3行目で、identifyというコマンドを使っています。これもImageMagickのコマンドで、対象ファイルの属性を調べるものです。ここでは画像の横幅を調べていて、それが320以上であればcompositeコマンドでロゴを合成する、ということをしています。

このコマンドは元ファイルを上書きするので注意してください。困る場合はmvコマンドを外せば上書きは行いません。

こちらもよく読まれています