ImageMagickでxcfをjpgに変換すると

「EXIF情報が付加されない!」

環境:GIMP 2.6.10, ImageMagic 6.5.7-8

 私はデジタル一眼レフで写真を撮る場合、raw形式でメモリーカードに保存している。それをコンピュータに移した後は、UFRawで現像し、直接GIMPで開いてxcf形式で保存する。WEBで公開する写真は、このxcfをGIMPで開き、適当な解像度に縮小してからjpgファイルを書き出していた。この流れで生成されるjpgファイルには、カメラが画像ファイルに付加したEXIF情報がしっかり残っている。

 が、処理する写真の枚数が多くなってくると、なるべく作業を自動化したくなる。上記の作業工程のうち、もっとも煩わしく、かつ簡略化できそうな部分というのは、xcfからjpgを書き出す作業である。最近はArt Creatureに掲載するための画像を、1920x1080pxと960x540pxの2種類書き出す必要があるため、特に面倒であると感じていた。

 さて、xcfファイルからjpgファイルを生成するのはImageMagickを使えば簡単である。

# convert xxx.xcf xxx.jpg

とすれば良い。画像サイズやjpgの品質を指定したければ、

# convert xxx.xcf -geometry 1920x1080 -quality 90 xxx.jpg

とする。mogrifyを使えばフォルダ内のxcfファイルをまとめてjpgにすることも簡単にできる。これなら、複数のxcfファイルから複数種類の画像サイズでjpg画像を書き出す作業など、簡単なシェルスクリプトで実現できる。……のだが、冒頭で書いたようにImageMagickを使うとEXIF情報が消えてしまうのである。早い話、ImageMagickはxcfファイルが格納しているEXIF情報を読み取れないのだ(ImageMagickでEXIF情報付きjpgからjpgを書き出す場合はEXIF情報が消えない)。

 ではどうしようか。多くの人は、「とりあえずGIMPで画像を縮小せずにjpgを書き出して、それをまとめて縮小するスクリプト書けばぁ?」と思うだろう。それなら、GIMP上で画像を縮小する手間は省けるし、jpgからjpgへの変換ならImageMagickで行ってもEXIF情報は消えないので有効な解決策に思える。……が、私には許容できない。それはしたくない。最終的なjpgファイルを書き出す過程において、ロスが生じる工程は挿みたくないのだ。つまり、この方法ではGIMPからjpgファイルを書き出す段階で一旦jpg圧縮がかかり、更に目的のサイズでjpgを書き出す際にjpg圧縮がかかるのである。jpg圧縮は不可逆圧縮でたとえ品質100%で書き出そうとも、ロスレスではない。「どうせサイズ縮小するんだから」とか「お前の撮ってる写真の出来をどうにかする方が先だ」とか言われそうだが、これは生理的な問題なのである。

 と、ここまで読むと、ちょいとデジタル画像に詳しい人ならこう考えるかも知れない。「GIMPからtiff形式で書き出せばいいんじゃね?」と。tiffは可逆圧縮でフルカラーの画像を記録でき、しかもEXIF情報に対応している。そこからjpgに変換すれば、途中でロスの生じる工程を挿まずに済む。……だが残念なことに、誠に残念であるがGIMPはtiffにEXIF情報を付加できないのである。

 よって、今現在の結論としては、xcfから複数の画像サイズでEXIF情報ありのjpgを書き出す作業を自動化したければ、GIMP上で動くスクリプトを書くという方法が一つ。あるいはImageMagickで変換したEXIF情報なしのjpgに、raw形式のファイル等からEXIF情報をコピーして埋め込むという方法が考えられそうである。多分前者の方が手法として正しいだろうし、調べながらやればできそうではあるのだが、私はScript-Fuには馴染みがないので面倒である。

 なんかいい方法あったら教えて下さい。海外のサイトとかちゃんと探せばプラグインが既にあるのかも知れませんが。

Post a Comment

Your email is never published nor shared.