JPeGooD
JPEG ファイルのサイズを小さくする
Perl 5
JPeGood とは
JPeGood とは JPEG の
- 不要データの削除 ( コメント、サムネイル画像等 )
- コメントの挿入
- 簡単な解析
ができる Perl ライブラリです。
※ 現在 JPEG 2000 には対応していません。
Sample
サンプルページへ移動します。
Download
Download [jpegood.pl]
使い方
不要データの削除
#eXample; require "jpegood.pl"; $result = jpegood::dieter ( $file, $option, $newFile );
$file は操作したい JPEG のパス
$newFile はファイルに書き出す場合、そのパス ( 省略可 )
$result には結果が返ります。 ファイルに書き出す場合は何バイト小さくなったか数値が返ります。 $newFile が省略されている場合は操作後のデータが返ります。 もし数字の 0 だった場合削除できるデータが存在しなかったことを意味します。 エラーが起こった場合は error という文字が返ります。
$option で削除対象を決めます。パラメータには以下のものがあり、
省略した場合は $option = 2; になります。
- コメントのみ削除
$option = 1;または$option = "com";- コメントとサムネイル画像の削除
$option = 2;または$option = "tni";- コメントとサムネイル画像と不要と思われるアプリケーションデータの削除
$option = 3;または$option = "app";- 不要と思われるデータを全て削除
$option = 4;または$option = "all";
コメントの挿入
#eXample; require "jpegood.pl"; $result = jpegood::inserter ( $file, $comment, $newFile );
$file は操作したい JPEG のパス。
$comment には挿入したいコメント。
$newFile はファイルに書き出す場合、そのパス ( 省略可 )。
$result には結果が返ります。 ファイルに書き出す場合、成功時は数字の 1 が返ります。 $newFile が省略されている場合は挿入後のデータが返ります。 エラーが起こった場合は error という文字が返ります。
簡単な解析
#eXample; require "jpegood.pl"; $result = jpegood::analyzer ( $file ); print $result;
「不要データの削除」のより詳しい説明
コメントのみ削除
これは COM セグメントを見つけたときのみセグメントの削除を行ないます。
コメントとサムネイル画像の削除
これは JFIF なら APP0 セグメントに含まれるサムネイル画像のデータを削除します。 Exif の場合は APP1 セグメントそのものを削除し、代わりに APP0 セグメントに 差し替えます。当然 Exif から JFIF へ変わる訳ですが、この時 APP0 セグメント内データは固定値 ( WEb 用 ) です。 JPeGooD の解析にかけると以下のように書き換わっています。 以下解析での出力結果。
実行前 ( Exif )
* APP1 : FF E1 / 3323 byte // Exif ( see TIFF ) * DQT : FF DB / 130 byte ( 以下略 )
実行後。JFIF に変わっている。
* APP0 : FF E0 / 14 byte
// JFIF
Version : 1.01
ResolutionUnit : 1
X-Resolution : 72
Y-Resolution : 72
ThumbNailImageWidth : 0
ThumbNailImageHeight: 0
* DQT : FF DB / 130 byte
( 以下略 )
コメントとサムネイル画像と不要と思われるアプリケーションデータの削除
これはコメントとサムネイル画像に加え APPn セグメントの削除を行ないます。が、デコーダによっては 例えば APP0 が無いと JPEG として認識されないということもあるかもしれないので 互換性の為 ( 疑問ですが ) 一番最初に現れる APPn だけは削除されずに残ります。 以下解析での出力結果
実行前
* APP0 : FF E0 / 14 byte
// JFIF
Version : 1.02
ResolutionUnit : 0
X-Resolution : 100
Y-Resolution : 100
ThumbNailImageWidth : 0
ThumbNailImageHeight: 0
* APP12 : FF EC / 15 byte
// Ducky
* APP14 : FF EE / 36 byte
// Adobe
* DQT : FF DB / 130 byte
( 以下略 )
実行後。APP12, APP14 が無くなっている。
* APP0 : FF E0 / 14 byte
// JFIF
Version : 1.02
ResolutionUnit : 0
X-Resolution : 100
Y-Resolution : 100
ThumbNailImageWidth : 0
ThumbNailImageHeight: 0
* DQT : FF DB / 130 byte
( 以下略 )
不要と思われるデータを全て削除
これは無くても問題ないと思われるセグメントを全て削除します。以下削除対象セグメント。
- APPn [0xFF E0 - 0xFF EF] ( アプリケーション・マーカ )
- COM [0xFF FE] ( コメント・マーカ )
- RES [0xFF F2 - 0xFF BF] ( 予約済みマーカ )
- JPG [0xFF C8] ( 予約済み拡張用マーカ )
- JPGn [0xFF F0 - 0xFF FD] ( 予約済み拡張用マーカ )
Copyright(C) 2002-2005 kerry.