Perl でTIFF画像入出力

2012-07-04 :  PCクリニック
テーマ:物理、化学、VM、医薬品、薬事法、FM COCOLO、甲斐田ゆき、矢作紗友里。
本文の前に、
-・・・ -・-
blogramのランクインカテゴリについて、
一昨日は、その後の観察で
11:30頃には、「firefox」がスコア・アップで1位回復。
また、「早稲田大学」もスコア・アップで3位から2位に。
下位では、「アミノ酸」が13位から11位にアップ。
なので、ランクの数は、12、12、1、1、0、 0、2、1、0、0(47)で、
換算ポイント、229pt にまで戻った。
これが、一昨日の確定値となった。
そして、
昨日は、ボロボロ。
朝時点で「Internet Explorer」がスコア大幅ダウンで2位に落ち、
「Safari」もスコア・ダウンで2位に落ち、
さらに「早稲田大学」がスコア・ダウンで2位から3位にダウン。
ランクの数は、10、13、2、1、0、 0、2、1、0、0(47)で、
換算ポイントは、223pt に下がった。
その後は、特に変化無く、昨日の確定値となった。
今朝になって、
「Safari」がスコア・アップで、1位に復帰。
「カルシウム」がスコア・ダウンで7位から8位に後退。
それから、
09:30頃には、「firefox」がスコア変わらずで2位に後退した。
なので、ランクの数は、10、13、2、1、0、 0、2、1、0、0(47)で、
換算ポイント、223pt にまで下がった。
それにしても、
「Linux」1位のお方のスコアは、またまたまたまた
時々刻々増え続けている!!!
・-・ - -・

さて、本文。

2年以上前に成りますが、
windows で C
以来、コンパイラ言語のメインは「C言語」(それも gcc)になっています。

C(gcc) 入門(4)
で書いたが、
  ・・・・・
  ActiveBASIC では、幾つかのモジュールを作っていました。
  ・・・・・
それまでの「ActiveBASIC」で作っていたモジュールは、全てCに移行している。

特に、「TIFF画像」の入出力については、使用頻度の高いもの。

但し、対象とするものは、制限が厳しい。
読み込みについては、
1ビット画像はダメ。
8ビット画像でも、PackBits以外の圧縮はダメ。
16ビット画像は、圧縮は全くだめ。
書き出しについては、
8ビット又は16ビットで無圧縮のみ。
等々。


ここで、
PBM/PGM/PPM:画像データ表現形式
で知った、PGM形式。

それと、
ImageMagick:画像形式変換ツール
がある。

「C言語」でのアクセス制限をなくせそう。
さらに、
「Perl」でもアクセスできそう。


分析・設計してみました。


まとめの前に、「ImageMagick」使用の補足。
ImageMagick:画像形式変換ツール
で書いた、
   ・・・・・
  (Just copy to your host and run とある)
  「Portable Win32 static at 16 bits-per-pixel」
  つまり、
  「ImageMagick-6.7.7-x-Q16-windows.zip」
  なら、
  展開した中にある、1つの「exe」だけで、どのマシンでも動いた。
  ・・・・・

実は、ウソ(正確では無い)だった。

本当にどのマシンでも動かすためには、
「convert.exe」1つだけではなく、「vcomp100.dll」も必要だった。
この2つがあれば、インストール不要。


それで、
TIFF画像の入力は、
(ImageMagick の)convert.exeで、TIFFをPGM形式に変換し、
それを、読み込む。

出力は、
PGM形式で出力して、
それを、
(ImageMagick の)convert.exeで、TIFFに変換する。


この方式なら、大抵の言語で楽にコーディングできる。


TIFF画像出力については、
自前で「PGM形式」で書き出す時に、ascii形式の「P2」で行えば、楽にできる。

ただ、TIFF画像入力については、
(ImageMagick の)convert.exeが出力する「PGM形式」はバイナリの「P5」である。
少し、工夫がいる。


「Perl」の場合、
最初は、(PGM形式)をテキスト・ファイルとして3行目まで読み。
「P5」の確認し、
列数、行数を取得し、
グレースケール値の255(又は65535)を確認する。

この時点で、「tell」関数で、ファイル内位置を覚えておく。

ファイルは一旦クローズし、
次にバイナリ形式でオープンする。

先に覚えておいた、ファイル位置に「seek」関数で位置づけ、
残り全てを「read」関数で一気に読み込む。

1バイトずつ「substr」関数で取り出し、
「ord」関数で数値化する。

これで、うまく行きました。

なお、
Perlでconvert.exeを実行するには、
  system ( "convert.exe ./kokonosita/hoge.tif ../sotoni/hogehoge.pgm" );
と云った感じですね。
(C(gcc)でも一緒)

これで、圧縮されているものでも大丈夫???


オ ソ マ ツ で し た。   <(_ _)>


見ていただきありがとうございました。
お帰りに投票して頂けると嬉しいです。 ⇒ blogram投票ボタン

日記@BlogRanking    
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク