Schwarz Lanzenreiter forward

JPeGooD

JPEG ファイルのサイズを小さくする

Perl 5


JPeGood とは

JPeGood とは JPEG

ができる Perl ライブラリです。

※ 現在 JPEG 2000 には対応していません。

▲ TOP

Sample

サンプルページへ移動します。

Sample page

▲ TOP

Download

Download [jpegood.pl]

▲ TOP

使い方

不要データの削除

#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";

▲ TOP

コメントの挿入

#eXample;
require "jpegood.pl";
$result = jpegood::inserter ( $file, $comment, $newFile );

$file は操作したい JPEG のパス。

$comment には挿入したいコメント。

$newFile はファイルに書き出す場合、そのパス ( 省略可 )。

$result には結果が返ります。 ファイルに書き出す場合、成功時は数字の 1 が返ります。 $newFile が省略されている場合は挿入後のデータが返ります。 エラーが起こった場合は error という文字が返ります。

▲ TOP

簡単な解析

#eXample;
require "jpegood.pl";
$result = jpegood::analyzer ( $file );
print $result;

▲ TOP

「不要データの削除」のより詳しい説明

コメントのみ削除

これは COM セグメントを見つけたときのみセグメントの削除を行ないます。

▲ TOP

コメントとサムネイル画像の削除

これは 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

 ( 以下略 )

▲ TOP

コメントとサムネイル画像と不要と思われるアプリケーションデータの削除

これはコメントとサムネイル画像に加え 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
 ( 以下略 )
 

▲ TOP

不要と思われるデータを全て削除

これは無くても問題ないと思われるセグメントを全て削除します。以下削除対象セグメント。


[PageTop] [Back] [Home]

Copyright(C) 2002-2005 kerry.