省型旧型国電の残影を求めて

戦前型旧型国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

ImageMagickを使って、Exif情報を維持してTIFFファイルをZIP圧縮する

 Vuescan+フィルムスキャナーを使って昔のフィルムをデジタル化していますが、16bit フル解像度で保存するとかなりファイルサイズを食います。TIFFファイルとDNG形式のRawファイルで保存すると、いずれも1枚 300Mほどのサイズになります。TIFFファイルの方はLZW圧縮を掛けていますが、それでも、画像によりますが、270M前後とそんなに小さくなりません。

 このうち、DNGファイルに関しては、AdobeのDNGコンバーターに掛けると6割ぐらいのサイズになることが分かりました。Vuescan上でDNGフォーマットで保存すると全く圧縮がかからないようです。因みにNikonのNEFファイルもDNGコンバーターに掛けてみましたが、NEFファイル自体圧縮がかかっているようで、圧縮効果があってもわずかしかありません。

 とりあえず、DNGファイルはDNGコンバータで処理するにして、問題はTIFFです。LZW圧縮にも圧縮率を上げるためのいろいろなオプションがあるようですが、ソフトによって読めたり読めなかったりします。最近のTIFF不可逆圧縮までサポートしているようですが、中身がJpegならわざわざTIFF形式で保存する意味が分かりません。ネットを探して見るとZIP圧縮が使えるという記事が... 確かに今まで使ったことがありませんでしたが、PhotoshopもZIP圧縮での保存のオプションがあります。試しにやってみると300M弱ぐらいのファイルが200M前後まで圧縮できるようです。LZWよりはるかに効率的です。ただ、ZIPで圧縮を掛けるときに「ZIP圧縮は、古いTIFFリーダーではサポートしていません。ファイルの保存に時間がかかる場合があります。ZIP圧縮を使用しますか?」という警告が出ます。

 そこで、ZIP圧縮のTIFFファイルはどれほど読めるのかを試してみました。IrfanViewは大丈夫、またGIMPも読めます。読めないTIFFが多い Capture NX-D でも大丈夫です。これでいけそうです。問題はバッチ処理でZIP圧縮のTIFFが書けるかですが... Photoshopだとバッチ処理で一応可能です。ただImageMagickを使った方が圧縮率が高いので、ImageMagickを使うことにしました。

 そして、DOS上のバッチコマンドを書いて、圧縮処理を始めると、うまくいきます。これで問題解決とほくそ笑んだのですが、一点、盲点がありました。変換先のファイルに Exif情報が引き継がれないのです。Photoshopだと受け継がれますが... Exif情報に撮影地や元々の撮影日などを入れていたので、これは痛いです。

 

 ネットの情報を探すと、日本語では、如何にExif情報を削るかという話題ばかり。「ImageMagckでConvert掛けると Exif情報が消えます... 」分かっているってば! それじゃ困るんだよ!

 海外のサイトを探すと -define tiff:exif-properties=true というオプションを入れるとコンバート先に引き継がれると書かれたQ & Aがあって試してみましたがダメ。さらに探すと、やっぱりそれではダメと書かれたQ & Aがあって、ImageMagickメタデータの書き込みはサポートしていないからExiftoolを使え、と書かれています。結局 Exiftoolと併用しないといけないようです。

 いろいろ試行錯誤して、最終的に以下のようなバッチスクリプトを書いて解決しました。

 今、仮に、オリジナルのTIFFファイルが入ったディレクトリを D:\TIFF とし、ZIP圧縮を掛けたTIFFファイルの書き込み先のディレクトリを D:\TIFF2 とします。その場合のバッチファイルのスクリプトです(Windowsが前提です。またImageMagickとExiftoolのインストールディレクトリ両方にパスが通っていることを前提とします)。

-----------------------------------

1行目: D:
2行目: cd D:\TIFF
3行目: for %%f in (*.tif) do magick convert %%f -define tiff:exif-properties=true -compress zip ..\TIFF2\%%f

4行目: for %%f in (*.tif) do exiftool -args -IFD0:ImageDescription -IFD0:Copyright -ExifIFD:DateTimeOriginal --filename --directory %%f > ..\TIFF2\%%f.txt
cd D:\TIFF2
5行目: for %%f in (*.tif) do exiftool -@ %%f.txt %%f

------------------------------------

1-2行目はカレントディレクトリをオリジナルTIFFファイルのあるディレクトリに設定します。

3行目は、ImageMagickを起動して、TIFFディレクトリにある*.tifファイルを、ZIP圧縮を掛けたTIFFファイルに変換し、結果をTIFF2ディレクトリに保存します。おまじないに -define tiff:exif-properties=true を入れましたがなくても良いと思います。

4行目はオリジナルのTIFFファイルからexiftoolを使って必要なExif情報を抜き出し、TIFF2ディレクトリに保存します。-argsはexiftool用のテキストフォーマットで情報を書き出すというオプションで、その後、抜き出したい Exifタグを指定しています。ここでは、 -IFD0:ImageDescription (ファイルの注釈) -IFD0:Copyright (著作権者情報) -ExifIFD:DateTimeOriginal (オリジナル撮影日時) を指定しています。また --filename --directory は出力にファイル名とディレクトリ名の出力を抑制させるオプションです。なお、必要以上の情報を書き出して、再度書き込むとTIFFファイルが開けなくなることがありますので、引き継ぎたい最小限の情報を書き出すようにするのが注意点です。

これを、オリジナルファイル名に .txt をつけたファイル名でテキストファイルとしてTIFF2ディレクトリに保存します。

5行目は、exiftoolを使って、保存したExif情報を同名のZIP圧縮したTIFFファイルに書き込んでいます。

 

 なお、ExifToolはすべての情報を書き換えられるわけではなく、書き換えられない情報もあります。