(金)ハイブリッド型EPUB3を生成するスクリプトのフィックスページ部分で画像サイズを取得する必要があった。「かんたんEPUB3作成ハイブリッド型EPUB3対応版」http://t2aki.doncha.net/easy_epub-hybrid定番のImageMagickを使えば簡単なんだけど、ImageMagickが簡単じゃなかった。WINDOWSではImageMagickのインストールが必要で、さらにActivePerlをインストールしたら一緒にインストールされるppmを使ってImageMagickを使うためのperlのモジュールのインストールが必要。ユーザーさんに別途インストールしてもらうにはちょっとハードルが高い。インストールしても、パッケージがあったのでそれをインストールしても、ソースからコンパイルしても、肝腎のJPEG、PNGに対応したものを作れなかった(JPEGはどうにかこうにか、まずJPEGのライブラリをインストールしてmakeしなおしたらjpeg対応版ができたけど、PNGがお手上げ)JPEGにもPNGにも対応したImageMagickを使ってるひとがいるようなので、わたしのスキル、知識不足。自分でうまく行ってないものをユーザーさんにインストールしてね、というのは無理すぎる。「かんたん」を謳う以上、面倒くさいことはひとつでも増えちゃいけない。ことで、扱うのはJPEGとPNGだけだし、perlだけで画像サイズを取得する方法を探してgoogleさま。ありがたいことに、そのまま利用できるサブルーチンなどがいくつかアップされていた。そのまま=ブラックボックスのまま使わせてもらうと、あとあとメンテの時などに困るのは火を見るより明らか。猿程度の理解は必要だろうと、画像について、その扱いについて調べたので、備忘録。・PNGは簡単らしい。height16byte目からの4byteに幅、続く4byteに高さのピクセル数が入っているので決め打ち。$buf);幅高さをネットワークバイトオーダーのビッグエンディアン(32bit)で取得するだけでOK。・JPEGがちょっと面倒。画像情報を格納しているのはSOFという種類のセグメント。マーカーというのは16進数の「FF」がセグメントの開始を表していて、これはどういうセグメントですよという内容を意味するのが「FF」に続く1Byteのバイナリ。SOFセグメントのマーカーで、JPEGのベースラインは「FF」「C0」プログレッシブは「FF」「C2」ということらしい。ファイルの先頭から見て「FF」が見つかったらそこからセグメントの開始となる(ファイル先頭と最後にはマーカーだけのセグメントがあるので、先頭の2Bytesは読み飛ばす)必要なのはJPEGの情報が入ったSOFセグメント。1)4Bytes読み込む。2)unpackでマーカーとセグメントサイズを取得する。3)→マーカーの1byteがFFじゃなかったら終了。→マーカーの1byteがFFでセグメント内容がC0かC2なら続くセグメント本体を読み込む。→マーカーの1byteがFFでセグメント内容がC0でもC2でもなかったら、セグメントの本体サイズ分読み飛ばして次のマーカーからの4byteを読む4)画像サイズはセグメント本体先頭に入っている。2Byteunpackで取得できる。ことで、easy_epub-hybridに組みこんだサブルーチンが以下。}スクリプトの中からImageMagickを使うシチュエーションのほとんどが画像サイズの取得なので、これは重宝しそうだ。jpeg画像について、おそらく間違ってるところがあると思うので、きちんとした知識は以下のサイトへどうぞ。参考にさせていただいたサイトhttp://tohoho-web.com/lng/200003/00030402.htmhttp://www2c.biglobe.ne.jp/~osakana/vc/pc/jpegsize.htmlhttp://hp.vector.co.jp/authors/VA032610/JPEGFormat/marker/SOF.htmhttp://www.setsuki.com/hsp/ext/segment/sof0.htm情報、丁寧な解説ありがとうございます。