IO_JPEG v2.3 をリリースしました
IO_JPEG が思ったより活用されてるので、Composer 対応しました。
ツールも少し増やしてます。
ちなみに、IO_JPEG は JPEG バイナリの情報要素をテキスト表示したり、バイナリの切り貼りをするための 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 も作る予定。
jpegrepair.php
SOS の中に 0xFFxx で xx が 0 以外のが入る場合に、とりあえず 0xFF00xx にするだけの、なんちゃって(形式だけ)修復ツールです。別に JPEG 画像が正しく治る訳でもないのですが、解析する時に便利な事があります。
-S (no sos scan モード)
SOS の中に 0xFFxx で xx が 0 以外だと、そこでエラーになるので、SOS チャンクで真面目にパースせず、ファイルの最後の EOI まで問答無用で読む。というモードです。