
指定したドキュメントのカラー画像を最適化カラー画像について最適化します。
カラー画像について圧縮形式、画像品質について指定して最適化し、最適化後のファイルを出力します。画像の圧縮形式は、自動、JPEG、JPEG2000、ZLIB、元のままの5種から選択します。画像品質は、最高、高、中、低、最低の5種から選択します。
その他のパラメータについては以下の値をデフォルト値としてプログラム内で指定して最適化を行います。これらデフォルト値は2.2.2 グレースケール画像最適化オプションの取得・指定、2.2.3 モノクロ画像最適化オプションの取得・指定でも共通で使用します。各設定項目の詳細については第4項以降で説明します。
| ダウンサンプリング条件 | 値 |
|---|---|
| これ以上のPPIならダウンサンプリングを行うPPI値 | 150 |
| ダウンサンプリング後のPPI値 | 75 |
| ダウンサンプリング方法 | バイキュービック法 |
| ダウンサンプリング率の下限値 | 0.65 |
PtlPDFDocument.APIoptimize(PtlParamOptimize paramOptimize): PDFを最適化する
PtlParamOptimize: 最適化に使うパラメータクラス
PtlParamOptimizeImage.APIgetParamOptimizeImage( ): 画像最適化オプションを取得
PtlParamOptimizeImage: 画像の最適化に使うパラメータクラス
PtlParamOptimizeImage.APIgetParamOptimizeImageColor ( ): カラー画像最適化オプションを取得
PtlParamOptimizeImageColor: カラー画像の最適化を表現したクラス
PtlParamOptimizeImageColor.APIsetCompress(PtlParamOptimizeImageColor.COMPRESS_TYPE type): 圧縮方法を設定
圧縮方法は次表の列挙型定数で指定します。
| 列挙型定数 | 説明 |
|---|---|
| COMPRESS_AUTO | 自動 |
| COMPRESS_JPEG2K | JPEG2000 |
| COMPRESS_JPEG | JPEG |
| COMPRESS_SAME | 元のまま |
| COMPRESS_ZLIB | ZLIB |
PtlParamOptimizeImageColor.APIsetQuality(PtlParamOptimizeImageColor.QUALITY_TYPE quality): 画像品質を設定
画像品質は次表の列挙型定数で指定します。
| 列挙型定数 | 説明 |
|---|---|
| QUALITY_MAX | 最高 |
| QUALITY_HIGH | 高 |
| QUALITY_MIDDLE | 中 |
| QUALITY_LOW | 低 |
| QUALITY_MIN | 最低 |
package cookbook;
import jp.co.antenna.ptl.*;
public class OptimizeImageColor {
// そのクラスのusageを表示する関数
private static void printUsage() {
System.out.println("usage: java OptimizeImageColor in-pdf-file out-pdf-file" +
" 圧縮方法 画像品質");
System.out.println("圧縮方法:");
System.out.println("0:元のまま 1:お任せ 2:JPEG 3:JPEG2000 4:ZLIB");
System.out.println("画像品質:");
System.out.println("0:最高 1:高 2:中 3:低 4:最低");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if (args.length < 3) {
printUsage();
return;
}
// コマンドライン引数の取得
int compressType = Integer.parseInt(args[2]);
if((compressType < 0) || (4 < compressType)) {
System.out.println("圧縮方法 は0から4の範囲の整数値で指定してください。");
printUsage();
return;
}
int qualityType = Integer.parseInt(args[3]);
if((qualityType < 0) || (4 < qualityType)) {
System.out.println("画像品質 は0から4の範囲の整数値で指定してください。");
printUsage();
return;
}
try (PtlParamInput inputFile = new PtlParamInput(args[0]);
PtlParamOutput outputFile = new PtlParamOutput(args[1]);
PtlPDFDocument doc = new PtlPDFDocument()) {
// PDFファイルをロードします。
doc.load(inputFile);
// 画像の最適化を行います。
optimizeDocWithParamImageColor(doc, compressType, qualityType);
// ファイルに保存します。
doc.save(outputFile);
}
catch (PtlException pex) {
System.out.println("PtlException : ErrorCode = " + pex.getErrorCode() +
"\n " + pex.getErrorMessage());
}
catch (Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
catch (Error ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
finally {
System.out.println("-- 完了 --");
}
}
public static void optimizeDocWithParamImageColor(PtlPDFDocument doc, int compressType, int qualityType)
throws PtlException{
try(PtlParamOptimize paramOptimize = new PtlParamOptimize();
// 画像最適化パラメーターの取得
// カラー画像最適化パラメーターの取得
PtlParamOptimizeImage paramOptimizeImage =
paramOptimize.getParamOptimizeImage();
PtlParamOptimizeImageColor paramOptimizeImageColor =
paramOptimizeImage.getParamOptimizeImageColor()) {
// 圧縮方法を設定
switch(compressType) {
case 0:
paramOptimizeImageColor.setCompress(PtlParamOptimizeImageColor.COMPRESS_TYPE.COMPRESS_SAME);
break;
case 1:
paramOptimizeImageColor.setCompress(PtlParamOptimizeImageColor.COMPRESS_TYPE.COMPRESS_AUTO);
break;
case 2:
paramOptimizeImageColor.setCompress(PtlParamOptimizeImageColor.COMPRESS_TYPE.COMPRESS_JPEG);
break;
case 3:
paramOptimizeImageColor.setCompress(PtlParamOptimizeImageColor.COMPRESS_TYPE.COMPRESS_JPEG2K);
break;
case 4:
paramOptimizeImageColor.setCompress(PtlParamOptimizeImageColor.COMPRESS_TYPE.COMPRESS_ZLIB);
break;
}
// 画像品質を設定
switch(qualityType) {
case 0:
paramOptimizeImageColor.setQuality(PtlParamOptimizeImageColor.QUALITY_TYPE.QUALITY_MAX);
break;
case 1:
paramOptimizeImageColor.setQuality(PtlParamOptimizeImageColor.QUALITY_TYPE.QUALITY_HIGH);
break;
case 2:
paramOptimizeImageColor.setQuality(PtlParamOptimizeImageColor.QUALITY_TYPE.QUALITY_MIDDLE);
break;
case 3:
paramOptimizeImageColor.setQuality(PtlParamOptimizeImageColor.QUALITY_TYPE.QUALITY_LOW);
break;
case 4:
paramOptimizeImageColor.setQuality(PtlParamOptimizeImageColor.QUALITY_TYPE.QUALITY_MIN);
break;
}
// 最適化する画像の対象Filterを設定
paramOptimizeImage.setValidFilter(PtlParamOptimizeImage.FILTER_ALL & ~PtlParamOptimizeImage.FILTER_JBIG2Decode);
// 画像のダウンサンプリングを行う最低サンプル数を設定
paramOptimizeImage.setMinSampleSize(110);
paramOptimizeImageColor.setSourcePPI(150);
paramOptimizeImageColor.setTargetPPI(75);
paramOptimizeImageColor.setDownSampling(PtlParamOptimizeImageDownSampling.DOWNSAMPLING_TYPE.DOWNSAMPLING_BICUBIC);
paramOptimizeImageColor.setMinDownSamplingRate(0.65f);
// 最適化の実行
doc.optimize(paramOptimize);
}
}
}
OptimizeImageColor.java
C:\samples>java cookbook.OptimizeImageColor usage: java OptimizeImageColor in-pdf-file out-pdf-file 圧縮方法 画像品質 圧縮方法: 0:元のまま 1:お任せ 2:JPEG 3:JPEG2000 4:ZLIB 画像品質: 0:最高 1:高 2:中 3:低 4:最低 C:\samples>java cookbook.OptimizeImageColor colorImg.pdf optimizeImageColor.pdf 2 1 -- 完了 --
colorImg.pdfの画像を圧縮方法:JPEG圧縮、画像品質:高で最適化します。このケースではファイルサイズは次のように1/3よりも小さくなりました。
colorImg.pdf: 500,898 optimizeImageColor.pdf:154,721