画像の変換と加工
画像の変換や加工を行うツールではAdobe社のフォトショップやCorel社のフォトペイントなどのコマーシャル・ソフトウェアをはじめ、XVのようなシェアウェアからNetpbmパッケージ、ImageMagick、Gimpといったフリーウェアまで、さまざまな種類のパッケージ・ツールが出回っています。中でもフリーウェアはX ContribのCD-ROMやFTPミラーサイトなどから簡単に入手できますので、それらを使った画像処理をざっと説明しましょう。画像の切り取り
画像を特定のサイズに収めたかったり、ある部分を残して切り取りたい場合がよくあります。UnixにおけるXVやdisplayは、マウスでドラッグした範囲を切り取ることが可能です。XVの場合、画像を表示させてマウスで切り取る範囲を四角くドラッグし、コントロール・ウィンドウのCropボタンをクリックします。すると、その部分を残して囲りの画像は消えます。また、ドラッグした状態でハサミ・アイコンをクリックすると、その部分が切り取られてなくなります。サイズ変更、回転、反転
イメージのサイズ変更、回転、フリップでもXVやdisplayは活躍しますが、ここではNetpbmパッケージのコマンドを使った方法を解説します。Netpbmパッケージのpnmscaleは、ポータブル・ビットマップ・イメージの拡大縮小をコマンドベースで行えます。
% pnmscale 1.5 <input_file> output_fileとすると、画像が1.5倍拡大され、% pnmscale 0.5 <input_file> output_fileとすると、画像が半分に縮小されます。また、pnmscaleはピクセル値によっても指定でき、たとえばGIFイメージを100×100にしたい場合は以下のとおりです。giftoppm input_file | pnmscale -xysize 100 100 | ppmquant 256 | ppmtogif> output_fileここでppmquantを使用しているのは、画像を縮小した場合、pnmscaleが余分な色を作ってしまうのを抑えるためです。イメージの回転、反転、ミラーは、Netpbmパッケージのpnmflipが使えます。90度時計方向に回転させる場合は、
% pnmflip -rotate90 <input_file> output_file90度逆時計方向に回転させる場合は、% pnmflip -rotate270 <input_file> output_file上下に反転させる場合は、% pnmflip -topbottom <input_file> output_fileミラーイメージを作る場合は、% pnmflip -leftright <input_file> output_file以上のように記述します。また、90度よりも小さな角度で回転させる場合はpnmrotateを用い、−90度〜+90度の範囲で指定すると、正であれば時計方向、負であれば逆時計方向に回転するわけです。たとえば、次の記述例だと30度時計方向へ回転します。% pnmrotate 30 <input_file> output_fileスムーズとシャープ
スムーズ効果は画像の境界をぼかす効果があります。ちょうど曇ガラスで見たようなイメージです。逆にシャープは境界をはっきりさせる効果があります。上記のフォトショップなど多くのコマーシャル・ソフトウェアは、これらの機能を備えているのが普通です。Unixの場合、Image Magickパッケージのdisplay、convert、mogrifyやXVツールにその機能があります。Netpbmパッケージでは、スムーズを行うpnmsmoothとシャープを行うpbmconvolのほか、大きさを変えながらスムーズするpbmpscaleもあり、以下が2倍に拡大してスムージングを数回行う場合の記述例です。bmptoppm heart.bmp | pnmenlarge 2 | pnmsmooth | pnmsmooth | pnmsmooth | ppmtogif→2倍に拡大してスムージングを行った例
色調整
GIFのような色数が限定された画像では、イメージ変換をした時に色が壊れることもあります。そんな場合はppmquantやppmquantallで色数を制限すると、かなり違います。たとえば、128色に抑えるなら、giftoppm input_file | ppmquant 128 | ppmtogif > output_fileこんな具合です。
GIFイメージの透明化
GIF89aは透明化をサポートしています。また、最近のブラウザ(閲覧ソフト)でこの機能が備わっていないものはほとんどありません。それらのブラウザでGIF89aの画像を見ると、透明化した画像の背景部分とそのまた背景が重なり、画像のイメージ部分だけを切り取って張り付けたような効果を得られます。今やGIFの透明化はWWWの世界で常識とさえ言えるでしょう。ここでは、Unix上で透明化GIFを作成するための2つの方法を紹介します。まず最初はNetpbmパッケージのppmtogifプログラムを用いるやり方です。ppmtogifの場合、-transparentというオプションがあり、これを使えば普通のGIFイメージを透明化できます。
giftopnm input_file | ppmtogif -transparent #rrggbb > output_file#rrggbbの部分へは、白なら#ffffff、黒なら#000000というように透明化したい色をRGB色で指定します。なお、画像からRGB色を知るにはXVが便利です。知りたい部分をマウスでクリックした上下どちらかへ、10進数と16進数の両方で表示されます。また、Andreas LeyによってGiftransと呼ばれるツールが開発されています。このツールは、NetpbmのようにGIFを中間形式へ変換する必要がないので非常に便利です。透明化したい色を以下のとおり-tで指定します。
giftrans -t #rrggbb input_file > output_fileこのツールはgiftrans.cとしてソースコードが公開されており、DOSやOS/2でも利用できます。なお、Windowsの場合はPaint Shop ProやLView Proなどのシェアウェアが透明GIFへの変換をサポートしており、たいへん便利です。また、次章で取り上げるGIFアニメーションの作成ツールGIF Construction Setも、GIFの透明化に使えます。マッキントッシュの場合はAaron GilesによってTransparencyと呼ばれるツールが開発されており、このツールは対話的に行うことができる点が便利です。GIFイメージのインターレース化
インターレースGIFイメージは、GIF87aとGIF89aでサポートされています。インターレースGIFの作成をUnixで行う場合、ここでもNetpbmが活躍します。透明化で利用したpnmtogifプログラムの「-interlace」を使うわけですが、この「-interlace」属性(オプション)は「-transparent」属性と一緒に用いることも可能です。giftopnm input_file | ppmtogif -interlace -transparent #rrggbb > output_fileWindowsでは先のPaint Shop ProやLView Pro、マッキントッシュではGIF Converterなどのシェアウェアが便利です。たとえば、LView Proを使って透明化インターレースGIFを作る場合、以下のように行います。
- LView Pro 1.Bを実行し、GIFファイルを開きます。
- インターレースGIFにしたければOptionsメニューのSave GIFsでGIF89aを選択します。
- OptionsメニューのBackground color...をクリックするとパレット・ウィンドウが表示されるので、Mask selecting usingボックスを選択し、Blackボタンをonにします。
- 黒く表示されます。また、これとは別の方法としてDropperボタンをクリックする方法もあります。
- 最後はファイルを保存しますが、その時GIF89aフォーマットで行わなければなりません。
よくある質問とその回答
GIFの透明化およびインターレース化に関する「よくある質問とその回答」は、下記のサイトが参照できます。
- http://dragon.jpl.nasa.gov/~adam/transparent.html
- ftp://csi.jpl.nasa.gov/pub/graphics/transparent.faq
スライドシートの作成
たくさんの画像を1つのシートに表示させるスライドシートを作成する場合、ImageMagickパッケージのmontagaツールが便利です。index.jpgを作成する方法は、(montage イメージファイル...出力ファイル)
なので、たとえば次のように指定します。
% montage win_samp.jpg bannm_m.gif redchili.gif traci_s.jpg slide.gifそうすると以下の画面が自動的に作成され、これを後ほど説明するクリッカブルマップと組み合わせて使用すれば、スライドシートは簡単に出来上がります。
作成された画像「slide.gif」
Xウィンドウの画面ダンプ
Xウィンドウの画面ダンプはxwdというコマンドが一般に使用されますが、画面全体あるいはウィンドウごとしかダンプが取れません。ところが、Bruce Schuchardtの開発したxgrabと呼ばれるソフトウェアは、画面の一部をダンプしたりダンプまでの時間を指定するカメラのような機能を持っています。また、XWD形式以外のXPMやポストスクリプトへ出力することも可能です。
Xgrabの制御画面