Linux でディジタル写真を扱う

現在位置のナビ

トップ写真の国 → Linux でディジタル写真を扱う
トップコンピュータの国雑記帳 → Linux でディジタル写真を扱う

はじめに

このふたつの質問に「はい」と答える人でも、

ときかれて「はい」と答える人は少ないようです。

ここでは私個人の経験を基に、 Linux でディジタル写真を扱うノウハウを記します。 私の環境は Vine Linux 2.6 なので、 他の Linux では多少事情が違うかも知れませんが、 参考にはなると思います。

重要なポイントは以下のとおりです。

応用編として次も用意しています。

USBで写真データを取り込む

最近のディジタルカメラは、 たいてい USB インタフェースを持っています。 まずこの USB で接続して、写真データを取り込みましょう。 Linux で USB がサポートされたのは最近だし、 デバイス対応のドライバが無いからと USB 接続をためらっている人は多いようです。 このさい、そんなためらいは捨てて、接続してみましょう。

USB は SCSI に似て、 接続のプロトコルや、デバイス種類別のコマンドが規定されています。 おまけに、コンピュータ本体と接続するデバイスの両方の電源をいれたままで 抜き差しすることができます。 そこで、 あなたのディジタルカメラが 一般 USB データストレージとして認識されれば、 汎用のストレージデバイスとして Linux からアクセスできます。

USB 接続時のモジュールロード

たしかに USB ストレージデバイスをアクセスするためには、 scsi_mod, sd_mod, usb-storage などのモジュールを カーネルに insmod する必要があります。 MS Windows では自動的にやってくれるこれらの処理を、 Linux ではなんとかしなければなりません。 でも、あなたの Linux で murasaki や usbmgr が動作していれば、 これらの処理を自動的にやってくれます。

USB に接続するデバイスは、 デバイスの種別やメーカーIDなどをコンピュータに報告します。 これらのIDを見て必要なモジュールを自動的に insmod してくれるのが、 murasaki や usbmgr なのです。 あなたのディジタルカメラが、一般データストレージとして動作し、 usbmgr などのコンフィギュレーションファイルに登録されている 有名なものだったら、これでOkです。

コンフィグレーションファイルに登録されているかどうか、 一般データストレージとして動作するかどうかは、 しう さんのページ で確認できます。

このページにあなたのカメラが載っていなくても、 一般ストレージとして動作する可能性は残っています。 とりあえず、usbmgr のドキュメントを読んで、あなたのカメラのIDを確認し、 コンフィグレーションファイルを書き換えてみましょう。

USB 一般ストレージとして認識されないカメラの場合

そこまでしても読めなかったり、 接続インタフェースが USB 以外のカメラもあるでしょう。 その場合でもあきらめるのは早いです。 あなたのカメラが一般的なメモリカードを使用している場合、 USB 接続のメモリカードリーダーを ストレージデバイスとしてアクセスできる可能性があります。 私のカメラ EOS D30 もこのケースでした。 カメラを直接アクセスすることはできなかったのですが、 メモリカードリーダーで一般ストレージデバイスとしてアクセスできる BUFFALO MCR-CF2 で読み出すことができました。

この文章は、MCR-CF2 以外の USB 接続のメモリカードリーダーについて Linux から使えるかどうかを保証しません。 すべて自己責任でお試し下さい。 ただ一般論として以下が言えます。 Windows で使うときに、 専用ドライバのインストールが必須のものは Linux から使えない可能性が高いです。 Windows 上でドライバ無しですぐに使えると書いてあるものは、 Linux から使える可能性が高いです。

また libusb、 gphoto2 というパッケージをインストールすると、 USB に接続したカメラから画像を読み出せるかも知れません。 gphoto2 は、テキストベースのコマンドですが、gtkam という X window 用のツールもあります。 EOS D30は、gtkam でアクセスすることができました。

gphoto2 を使用するときは、デバイスのアクセス権に注意しましょう。 アクセス権がない時でも、エラーメッセージはそう言わないので わかりにくいです。 とりあえず、root で実行してしまえば、問題なし。

ファイルシステムとしてマウント

一般ストレージとして認識できた場合、 次はファイルシステムをマウントする必要があります。 ディジタルカメラのメモリフォーマットは MS Windows の FAT ファイルシステムを採用しているようです。 また仮想的に SCSI デバイスとして認識されるので、 /dev/sda1 を vfat でマウントすればOkです。 Linux kernel 2.2 では vfat 関係に問題があるらしく、 read only でしかマウントできません。 Kernel 2.4 では、read write でマウントできます。

USB デバイスを外す前に、unmount するのを忘れないようにしましょう。 忘れっぽい人は、read only でマウントするのも手です。

ファイルコピー時の注意

マウントに成功しても、まだまだ落し穴が待っています。 メモリカードはアクセス速度が遅いのですが、 なぜか USB ドライバは待ってくれません。 JPEG ファイルが何十個もあるときに

%cp * /home/myname/photo/

なんて実行すると、 メモリカードの応答を待ち切れずに cp がタイムアウトしてしまいます。 そこで1個ずつコピーしながら適当に待ち時間を入れるか、 1個ファイルコピーする毎に1秒待つようなスクリプトを書くとよいです。

2004年現在カーネル2.4.22 ではこの問題が解決されています。 新しいカーネルを使えば大丈夫ですね。

Windows の落し穴

ここで書いたようなメモリカードのアクセスは、 MS Windows でもできます。 ところが、Windows でも落し穴があります。 Windows で普通の外部記憶としてメモリカードをアクセスしていると、 Windows 特有の隠しファイルをメモリカードに作られてしまいます。 総容量数MBに対して数KBのことなので容量的には無視できるのですが、 Linux でマウントしたときに余計なファイルが見えるのは、欝陶しいです。

写真データを編集する

Linux に JPEG ファイルをコピーできたら、次は編集作業です。 普通はディジタル写真の編集と言うと、 GUI を使ったアプリケーションでの操作を指します。 でも Linux では、コマンドラインからのバッチ処理ができます。 ここでは、主にバッチ処理について書きます。

Linux でディジタル写真の処理を行えるGUIアプリケーション

私のマシンには gimp と ImageMagick がインストールされています。 このふたつのアプリケーションがあれば、ほとんどの作業はできるでしょう。 多少操作にクセがあるようですが、慣れればなんとかなりそうです。

ImageMagick は GUI のメインと、 そこから呼び出されるサブコマンドに別れています。 サブコマンドはコマンドラインから呼び出すバッチ処理に利用できます。

私が今使用している ImageMagick 5.2.9 はバグがあるらしく、

という作業を行うと、 セーブの時点で GUIごと異常終了してしまいます。 仕方がないので、crop の直前でファイルのセーブとロードを行っています。 バージョン 5.1.1 のときはこんなことは無かったんですけど。

あと、16bit TIFF を half size に縮小してセーブすると、 8bit TIFF になってしまいます。

JPEG の loss less 回転

大抵のディジタルカメラは、横長の画像を記録します。 人物写真など縦長のものを写すときは、90度回転させて撮ります。 この画像を取り込んだ時点では、 逆に 90度回転した状態の横長画像になっています。 本来の縦長画像にするには、データを回転させなければなりません。 普通に回転させるときは、 いったん JPEG ファイルを展開して、90度回転して、 再度 JPEG の圧縮をかけます。 JPEG の圧縮が2度かかることになるので、 撮影画像のデータが劣化してしまいます。 ところが、劣化無しに画像の 90 度回転を行えるアプリケーションがあります。 Loss less 回転を行いたいときは、jpegtran を使いましょう。

JPEG のサイズ変換、BMPなど他フォーマットへの変換

拡大縮小してJPEG のピクセル数を変換したり、 BMP など他フォーマットへ変換する場合は、 ImageMagic のサブコマンド convert が使用できます。

JPEG ファイルから余計な情報を削除する

最近のディジタルカメラが撮影する JPEG ファイルには、 Exif とか DCF とかのフォーマットで追加情報が格納されています。 追加情報は、撮影日時やシャッター速度などの情報と、 サムネイル画像からできています。 人に画像ファイルを渡すのに追加情報を知られたくないときや、 サムネイル画像を作ったのに 追加情報のおかげでファイルサイズが大きくなっている場合などは、 追加情報を削除しましょう。

%jpegtran -copy none fromfile >tofile

で削除できます。

画像変換ソフトを使った場合、編集によって追加情報が失われるときと、 保存されるときがあります。 注意しましょう。

サムネイル画像の自動生成

シェルスクリプトと convert コマンドを組み合わせると、 サムネイル画像を一括してバッチ処理で作ることができます。 画像に縦長と横長のものが混在しているときにサムネイルを作るには、 私の作ったコマンド を参考にしてください。

HTML ファイルを作る

さて、Linux マシンに JPEG ファイルが用意できましたが、 これをどうやって鑑賞しますか。 鑑賞する度に画像エディタを立ち上げて、ファイルを開きますか。 それは面倒でしょう。 Windows ユーザーだったら、写真集ソフトを買ってくるところでしょう。 Linux らしい解決策はなんでしょうか。 Linux 用の写真集ソフトを作りますか。 いえいえ、そんな面倒はいりません。 HTML ファイルを作って、自分専用の web サイトを作ってしまえばよいのです。 HTML ファイルの書き方は、巷にあふれている入門書で勉強してください。 HTML ファイルのリンクを利用すれば、 ボタンを押す度に次の写真を表示させることができます。 あるいは、サムネイル一覧から目的の写真まで一気に飛ぶこともできます。 HTML ファイルができあがっても、 web サーバーを立ち上げる必要なんてありません。 あなたの HTML ファイルのトップが /home/myname/photo/index.html だったら、 ブラウザの URL 入力部分に

file:///home/myname/photo/index.html

と入力すれば良いのです。 このファイルをブックマークに入れることもできます。

街角のディジタルフォトプリンターで レタッチした写真を出力する

最近は写真屋の店頭にディジタルフォトプリンターが置いてあります。 これは、ディジタルカメラのメモリーカードから画像を読み取って、 印画紙にプリントしてくれる機械です。 操作も簡単です。 この機械に慣れると、 自宅のインクジェットプリンターを必死に調整して写真を出力するのが ばからしくなってきます。

そこで疑問が生じるのですが、 自分でレタッチした画像をこのプリンターで出力することはできるのでしょうか。 実は、できるんです。 レタッチした画像を JPEG に変換してメモリカードに格納し、 機械に差し込むだけでOkです。 ちなみに私が試した機種は、 フジカラー製のプリンチャオ(2Lサイズまでプリントできるもの)ですが、 他の機種でも試してみる価値はあります。

ディジタル写真集を CD-R に記録して配る

何かのイベントを撮影して、ディジタル写真を人に配る機会があります。 このようなときは、 CD-R に先に述べた HTML ファイルを一緒に入れてしまえば良いです。

さらにコンピュータに不慣れな Windows ユーザーのために、 HTML ブラウザを自動起動する設定にしてあげましょう。 そのためには、 CD-R のルートディレクトリに autorun.inf というファイルを用意します。 ファイルの中身は、

[autorun]
open=rundll32.exe url.dll,FileProtocolHandler index.html

と書きます。

最後の index.html はトップページの HTML ファイルを示しますので、 あなたの作成したファイルに合わせて変更してください。

また、ISO 9660 レベル1 に合わせて書き込めば、 Macintosh でも表示できます。 具体的には、ファイル名を 8文字以内の英数字 + '.' + 3文字以内の英数字 とすれば良いです。

Linux で書き込んで他のPCで見るだけだったら、 ハイブリッドフォーマットで書き込めばだいじょうぶです。 でもその CD-R/RW を受け取った人が 自分のPCでさらにコピーして配る場合も考えると、 ISO 9660 レベル1で書き込むのが無難でしょう。

Windows だけでなく Macintosh でも自動起動してくれるとありがたいのですが、 そうさせる方法を私は知りません。 また Linux では、自動起動は無理ですよね。

メモリカード経由でデータを交換する

USB 接続のデバイスの中に、 フラッシュメモリにデータを入れてパソコン間で交換できるものがあります。 でもちょっと待って下さい。 今までの手順で、ディジタルカメラかメモリカードリーダー経由で、 ディジタルカメラ用のメモリを読み書きできるようになりましたよね。 そうです、ディジタルカメラのメモリを利用して、 先のデバイスと同様にパソコン間のデータ転送ができるのです。 しかもファイルシステムは FAT ですから、Linux 間だけではなく、 Windows ともデータ交換できます。 覚えておくと、いざというときに役に立つかもしれません。

RAW ファイルを変換する

メーカー独自フォーマットの RAW 画像を変換するフリーソフトを探している方は、 dcraw 拡張版 までどうぞ。

どうしても Linux ではできないこと

ここまでの作業をマスターすれば、 Linux だけで相当のことができると思います。

あとは、gimp や ImageMagick の操作になれることが重要でしょう。

2002年11月8日 初出

2004年5月12日 追記


back button コンピュータの国 雑記帳にもどる

back button 写真の国にもどる