IO_JPEG v2.3 をリリースしました

IO_JPEG が思ったより活用されてるので、Composer 対応しました。
ツールも少し増やしてます。

ちなみに、IO_JPEGJPEG バイナリの情報要素をテキスト表示したり、バイナリの切り貼りをするための PHP プログラムです。IO_Bit が必要です。

リリース

ChangeLog
  • Composer 対応
  • jpegchunk.php 追加。チャンク分解。-c (catモード)の場合 A,B,C チャンクがある時に、A,AB,ABC バイナリを出力する。
  • jpegdelmeta.php 追加。メタデータ全削除
  • jpegrepair.php 形式だけ修復ツール。(SOSの 0xffxx を 0xff00xx エスケープする)
  • jpegdump.php, jpegchunk.php に -S(スキャンしないモード)追加。他も適宜追加するつもり
  • チャンク内の情報要素を読み終わって次のバイトがマーカーでない場合、マーカーが見つかるまで読み飛ばす処理を追加。
  • APP0 dump で代入してない $identifier を参照する不具合を修正。

Composer 対応

% composer require yoya/io_jpeg

(注) composer require コマンド実行にそこそこ時間かかります。

これだけで手元のディレクトリにインストール出来ます。

% php vendor/yoya/io_jpeg/sample/jpegdump.php
Usage: php jpegdump.php [-h] [-d] [-S] -f <jpegfile>
% php vendor/yoya/io_jpeg/sample/jpegdump.php -f Opaopa.jpg
SOI:
APP0: length=16
DQT: length=67
DQT: length=67
SOF0: length=17
DHT: length=27
DHT: length=72
DHT: length=28
DHT: length=81
SOS: length=(null)
EOI:

-d で詳細表示。-h で hexdump 表示。SOS の中身が壊れてる時は -S をつけると良いです。

ツール追加

jpegchunk.php
% php sample/jpegchunk.php -f Opaopa.jpg -s
% ls -l *.jc
-rw-r--r--  1 yoya  staff     2 12  8 23:51 00_SOI.jc
-rw-r--r--  1 yoya  staff    18 12  8 23:51 01_APP0.jc
-rw-r--r--  1 yoya  staff    69 12  8 23:51 02_DQT.jc
-rw-r--r--  1 yoya  staff    69 12  8 23:51 03_DQT.jc
-rw-r--r--  1 yoya  staff    19 12  8 23:51 04_SOF0.jc
-rw-r--r--  1 yoya  staff    29 12  8 23:51 05_DHT.jc
-rw-r--r--  1 yoya  staff    74 12  8 23:51 06_DHT.jc
-rw-r--r--  1 yoya  staff    30 12  8 23:51 07_DHT.jc
-rw-r--r--  1 yoya  staff    83 12  8 23:51 08_DHT.jc
-rw-r--r--  1 yoya  staff  4040 12  8 23:51 09_SOS.jc
-rw-r--r--  1 yoya  staff     2 12  8 23:51 10_EOI.jc

で分解して、適当に中身をいじった後で

% cat ??_*.jc > out.jpg

これで戻せます。長さが変わると駄目なので、後で jpegcat も作る予定。

jpegdelmeta.php

これは APP1, APP2 等のメタデータを削除するだけです。

jpegrepair.php

SOS の中に 0xFFxx で xx が 0 以外のが入る場合に、とりあえず 0xFF00xx にするだけの、なんちゃって(形式だけ)修復ツールです。別に JPEG 画像が正しく治る訳でもないのですが、解析する時に便利な事があります。

-S (no sos scan モード)

SOS の中に 0xFFxx で xx が 0 以外だと、そこでエラーになるので、SOS チャンクで真面目にパースせず、ファイルの最後の EOI まで問答無用で読む。というモードです。