sipsコマンドは使えるかも
印刷屋としては、画像処理は避けて通れない道だったりします。
最近は何でもアプリケーションサーバで処理する傾向があって、ファイル容量も大きなものを扱う必要があったりなど、ちょっと悩みの種でもあります。
今の所、Javaの Java Image I/O API を使っていますが、Javaでデカイ画像を扱うのは勇気がいります。それに、CMYKの扱いが今ひとつだったりしますし。
Photoshopを使えば簡単にできるような処理も、サーバ上でそれをやる訳にも行かず(やって出来ない事は無いだろうけど・・)、どうしたものかと考えておりました。
そこで、せっかく画像処理に強いと言われる(笑)Mac OSX を運用プラットフォームにしている強みを生かして、何か簡単で良い方法が無いかと調べていた所・・・やっぱりありました。
sipsコマンドです。なんだ、Pantherからあったのか。知らんかった(笑)
sipsで出来る事
このページ(http://developer.apple.com/jp/technotes/tn2035.html)に日本語の解説が載っていました。
- 各種ラスタイメージ形式の読み書きと変換
- jpeg(Jfif および Xiff)、GIF、PNG
- 基本的画像処理
- 回転、反転、切り取り、パディング、再サンプリング、解像度変更
- カラーマネージメント操作
- プロファイルの埋め込み、抽出、調整
- 既知のメタデータタグの読み書き
- 可能な限りのオリジナルコンテンツの維持
印刷屋的には、おそらく一番最後の「可能な限りのオリジナルコンテンツの維持」ってのが重要な気がします。
これから書く事は、実は2003年12月のこの記事(http://journal.mycom.co.jp/column/osx/073/)と、ほとんどかぶってしまう事が判明しましたが、個人的なテストの結果としてメモしておきます。
画像のプロパティを取得する
- 取れるだけ取ってくる
- sips -g all imageFile
$ sips -g all test.jpg
/test.jpg
pixelWidth: 3136
pixelHeight: 2352
typeIdentifier: public.jpeg
format: jpeg
formatOptions: default
dpiWidth: 314.000
dpiHeight: 314.000
samplesPerPixel: 3
bitsPerSample: 8
hasAlpha: no
space: RGB
creation: 2006:01:09 11:49:37
make: OLYMPUS IMAGING CORP.
model: E-330
software: Version 1.0
description: OLYMPUS DIGITAL CAMERA
縦横のピクセル数、解像度、カラースペースはもとより、メタデータのたぐいも拾って来れますね。
$ sips -g pixelHeight -g pixelWidth test.jpg
/test.jpg
pixelHeight: 2352
pixelWidth: 3136
不要な情報がいらない場合は、-gオプションに欲しいプロパティ名をつければOKです。
- 複数画像のプロパティを取ってくる
- sips -g propertyName imageFile1 imageFile2...
$ sips -g pixelHeight -g pixelWidth test.jpg test2.jpg
/test.jpg
pixelHeight: 2352
pixelWidth: 3136
/test2.jpg
pixelHeight: 2304
pixelWidth: 1736
画像のフォーマットを変更する
$ sips -s format tiff --out out.tiff test.jpg
/test.jpg
/out.tiff
画像のフォーマットは、jpeg、tiff、png、gif、jp2、pict、bmp、qtif、psdとなっています。
ちなみに、TIFF変換した画像のプロパティを見てみると、ちゃんと「可能な限りのオリジナルコンテンツの維持」ってのが果たされているのが分かります。
$ sips -g all out.tiff
/out.tiff
pixelWidth: 3136
pixelHeight: 2352
typeIdentifier: public.tiff
format: tiff
formatOptions: default
dpiWidth: 314.000
dpiHeight: 314.000
samplesPerPixel: 3
bitsPerSample: 8
hasAlpha: no
space: RGB
creation: 2006:01:09 11:49:37
make: OLYMPUS IMAGING CORP.
model: E-330
software: Version 1.0
description: OLYMPUS DIGITAL CAMERA
- JPEG画像の品質を指定して保存する
- sips -s format jpeg -s formatOptions default | [low|normal|high|best|
] |packbits --out outImage imageFile
$ sips -s format jpeg -s formatOptions low --out outImage test.jpg
/test.jpg
/out.jpg
formatOptionは直接パーセント指定も出来るようです。
$ sips -s format jpeg -s formatOptions 50 --out outImage test.jpg
/test.jpg
/out.jpg
画像をリサイズする
$ sips --resampleWidth 300 --out out.jpg test.jpg
/test.jpg
/out.jpg
このリサイズは、縦横比を維持したまま、幅を300ピクセルにリサンプルします。また、高さの指定は --resampleHeight になります。
$ sips --resampleHeightWidth 300 200 --out out.jpg test.jpg
/test.jpg
/out.jpg
縦横比を変更したい場合はこのオプションを使います。
$ sips --resampleHeightWidthMax 100 --out out.jpg test.jpg
/test.jpg
/out.jpg
結構使えるオプションかも知れません。DTP系の言葉で言えば(?)縦横100ピクセルのボックスにフィットするように画像を縮小する言えばよいでしょうか。
ちなみに、これらのコマンドは実際の画像のピクセル数が指定より小さい場合、逆に拡大されてしまうので要注意です。
サーバー用途?
sipsコマンドは必要最低限な実装になっています。ただ、将来的にはフィルターやレイヤーを扱えるようにしたいとAppleさんも言ってます*1ので、そのうち何とかなるかもしれません。
アプリケーションサーバで使うとしたら、アップロードされた画像のフォーマットチェックとか、画像のリサイズ等に使えますね。
ただ、個人的に使えない理由の一つに、グレースケールに変換等の処理が出来ない事です。あー、これさえあれば今すぐにでも使うのになぁ。やっぱりQuartz2D APIを叩かないと駄目かなぁ。