FC2ブログ

Perl で、TIFFファイル出力

2013-09-07 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
3、3、1、1、2、 2、0、0、1、1(40)で、換算ポイント 72pt 。
と書いている間に「Linux」がダウンして、
3、3、1、1、2、 2、0、0、1、0(40)で、換算ポイント 71pt 。
・-・ - -・

さて、本文。

最近(?)では、
TIFFファイルの入出力は「ImageMagick」を利用している。
因みに、TIFFに関する記事
(尤も、どんな形式の画像ファイルでも一緒だが)

それも、
ImageMagick:画像形式変換ツール
で書いたように、(インストールするのではなく)
  「Portable Win32 static at 16 bits-per-pixel」
  つまり、
  「ImageMagick-6.7.7-x-Q16-windows.zip」
(現時点では、「ImageMagick-6.8.6-9-Q16-x86-windows.zip」)
から抜き出した、
Perl でTIFF画像入出力で書いた如く)
  「convert.exe」、「vcomp100.dll」の2つ
のみ持ち運ぶ。



ここで、過去を振り返る。


6年前(2007年(H19年))に、TIFFファイル入出力を、
(当時の常用言語)
「ActiveBASIC」でやってみたくなり、
TIFFファイルの仕様書を探し、ダウンロードした。

このPDFファイル:「TIFF6.pdf
(今でも、(Firefoxで)「TIFF6.pdf」とGoogle検索すると1番目にヒットする)

それで、この仕様書を、
当時、一生懸命(?)解読し、
翌年(2008(H20).01.17)やっと、機能限定ながら、処理モジュールが出来た。

8ビット、グレースケール、無圧縮、で入出力とも。


その後、「ActiveBASIC」から「MinGW」に移り、

上記の ActiveBASIC 版を gcc 版に移植した。(2010(H22).06.08)


それで、
近頃は、(「Perl + C言語」以来)
先ずは、「Perl」で考える。

と云うことで、
上記TIFFファイル入出力モジュールを、「Perl」に移植、したい!

入力系は、機能制限が多い・・・・・TIFF仕様は複雑!

なので、出力に限定した。

8ビット、グレースケールで、無圧縮で。

ここまで限定すると、簡単!?

序でに、パッケージ化してみた。
(下記には、2バイト空白含)

package tif_Wt_pkg;
sub tif_Wt{
  # ファイル名、サイズ(行数、列数)、データ(2次元)
  ( $tif_F , $yy , $xx , $GT ) = @_;
      # ---------- TIFF ヘッダー・データ
  @H1 = ( 0x4949, 42, 8,0, 14 );  # 2バイト整数5つ
      # 4バイト整数47こ
  @H2 = ( 0x100+65536*3, 1,  0,  0x101+65536*3, 1,  0,
       0x102+65536*3, 1,  8,  0x103+65536*3, 1,  1,
       0x106+65536*3, 1,  1,  0x111+65536*4, 1, 198,
       0x115+65536*3, 1,  1,
       0x116+65536*3, 1,  0,  0x117+65536*4, 1,  0,
       0x118+65536*3, 1,  0,  0x119+65536*3, 1, 255,
       0x11A+65536*5, 1, 182,  0x11B+65536*5, 1, 190,
       0x128+65536*3, 1,  2,  0,
     65536*0x4800, 65536*0x0100, 65536*0x4800, 65536*0x0100 );
  # ---------- 処理部
  $H2[2]=$xx; $H2[5]=$yy; $H2[23]=$yy; $H2[26]=$xx*$yy; # 設定
  open( TF , ">".$tif_F ); binmode TF;
  $w=pack( "S*" , @H1 );   print TF $w;
  $w=pack( "L*" , @H2 );   print TF $w;
  for ( $y=0; $y<$yy; $y++ ){
     $w=pack( "C*" , @{$$GT[$y]} );
     print TF $w;
  }
  close( TF );
}
1;

これを利用するときは、

require 'tif_Wt_pkg.pl';
$yy=3;  $xx=8;   # 行数、列数
@GT=( [ 0, 0, 0, 0, 0, 0, 0, 0 ],
   [ 0, 0, 180, 180, 180, 0, 200, 200 ],
   [ 0, 0, 0, 0, 0, 0, 0, 0 ] );
&tif_Wt_pkg::tif_Wt( "test.tif", $yy, $xx, \@GT );
    # ファイル名、行数、列数、データ(2次元)

とする。

これで、Perl で、直接TIFFファイル出力が出来た。



見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


130709,0815
関連記事
スポンサーサイト



コメントの投稿

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

人気blog Ranking



最新記事
カレンダー
07 | 2021/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




Google Analytics
ブックマーク