
指定したドキュメントのグレースケール画像を最適化グレースケール画像について最適化します。
最適化するグレースケール画像の圧縮形式、画像品質について指定し、2.2.1 カラー画像最適化オプションの取得・指定と同様にして最適化します。グレースケール画像とは、モノクロ写真に代表されるような色情報が無く、明暗だけで表現された画像のことです。画像の圧縮形式は、自動、JPEG、JPEG2000、ZLIB、元のままの5種から選択します。画像品質は、最高、高、中、低、最低の5種から選択します。
PtlParamOptimizeImage.APIgetParamOptimizeImageGrayScale (): グレースケール画像最適化オプションを取得
PtlParamOptimizeImageGrayScale: グレースケール画像の最適化を表現したクラス
PtlParamOptimizeImageGrayScale.APIsetCompress(PtlParamOptimizeImageGrayScale.COMPRESS_TYPE type): 圧縮方法を設定
圧縮方法は次表の列挙型定数で指定します。
| 列挙型定数 | 説明 |
|---|---|
| COMPRESS_AUTO | 自動 |
| COMPRESS_JPEG2K | JPEG2000 |
| COMPRESS_JPEG | JPEG |
| COMPRESS_SAME | 元のまま |
| COMPRESS_ZLIB | ZLIB |
PtlParamOptimizeImageGrayScale.APIsetQuality(PtlParamOptimizeImageGrayScale. QUALITY_TYPE quality): 画像品質を設定
画像品質は次表の列挙型定数で指定します。
| 列挙型定数 | 説明 |
|---|---|
| QUALITY_MAX | 最高 |
| QUALITY_HIGH | 高 |
| QUALITY_MIDDLE | 中 |
| QUALITY_LOW | 低 |
| QUALITY_MIN | 最低 |
package cookbook;
import jp.co.antenna.ptl.*;
public class OptimizeImageGrayScale {
// そのクラスのusageを表示する関数
private static void printUsage() {
System.out.println("usage: java OptimizeImageGrayScale 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 < 4) {
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);
optimizeDocWithParamImageGrayScale(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 optimizeDocWithParamImageGrayScale(PtlPDFDocument doc, int compressType, int qualityType)
throws PtlException{
try(PtlParamOptimize paramOptimize = new PtlParamOptimize();
// 画像最適化パラメーターの取得
// カラー画像最適化パラメーターの取得
PtlParamOptimizeImage paramOptimizeImage =
paramOptimize.getParamOptimizeImage();
PtlParamOptimizeImageGrayScale paramOptimizeImageGrayScale =
paramOptimizeImage.getParamOptimizeImageGrayScale()) {
// 圧縮方法を設定
switch(compressType) {
case 0:
paramOptimizeImageGrayScale.setCompress(PtlParamOptimizeImageGrayScale.COMPRESS_TYPE.COMPRESS_SAME);
break;
case 1:
paramOptimizeImageGrayScale.setCompress(PtlParamOptimizeImageGrayScale.COMPRESS_TYPE.COMPRESS_AUTO);
break;
case 2:
paramOptimizeImageGrayScale.setCompress(PtlParamOptimizeImageGrayScale.COMPRESS_TYPE.COMPRESS_JPEG);
break;
case 3:
paramOptimizeImageGrayScale.setCompress(PtlParamOptimizeImageGrayScale.COMPRESS_TYPE.COMPRESS_JPEG2K);
break;
case 4:
paramOptimizeImageGrayScale.setCompress(PtlParamOptimizeImageGrayScale.COMPRESS_TYPE.COMPRESS_ZLIB);
break;
}
// 画像品質を設定
switch(qualityType) {
case 0:
paramOptimizeImageGrayScale.setQuality(PtlParamOptimizeImageGrayScale.QUALITY_TYPE.QUALITY_MAX);
break;
case 1:
paramOptimizeImageGrayScale.setQuality(PtlParamOptimizeImageGrayScale.QUALITY_TYPE.QUALITY_HIGH);
break;
case 2:
paramOptimizeImageGrayScale.setQuality(PtlParamOptimizeImageGrayScale.QUALITY_TYPE.QUALITY_MIDDLE);
break;
case 3:
paramOptimizeImageGrayScale.setQuality(PtlParamOptimizeImageGrayScale.QUALITY_TYPE.QUALITY_LOW);
break;
case 4:
paramOptimizeImageGrayScale.setQuality(PtlParamOptimizeImageGrayScale.QUALITY_TYPE.QUALITY_MIN);
break;
}
// 最適化する画像の対象Filterを設定
paramOptimizeImage.setValidFilter(PtlParamOptimizeImage.FILTER_ALL &
~PtlParamOptimizeImage.FILTER_JBIG2Decode);
// 画像のダウンサンプリングを行う最低サンプル数を設定
paramOptimizeImage.setMinSampleSize(110);
paramOptimizeImageGrayScale.setSourcePPI(200);
paramOptimizeImageGrayScale.setTargetPPI(150);
paramOptimizeImageGrayScale.setDownSampling(PtlParamOptimizeImageDownSampling.DOWNSAMPLING_TYPE.DOWNSAMPLING_BICUBIC);
paramOptimizeImageGrayScale.setMinDownSamplingRate(0.65f);
// 最適化の実行
doc.optimize(paramOptimize);
}
}
}
OptimizeImageGrayScale.java
C:\samples>java cookbook.OptimizeImageGrayScale usage: java OptimizeImageGrayScale in-pdf-file out-pdf-file圧縮方法 画像品質 圧縮方法: 0:元のまま 1:お任せ 2:JPEG 3:JPEG2000 4:ZLIB 画像品質: 0:最高 1:高 2:中 3:低 4:最低 C:\samples>java cookbook.OptimizeImageGrayScale grayImg.pdf optimizeImageGray.pdf 2 1 -- 完了 --
grayImg.pdfの画像を圧縮方法:JPEG圧縮、画像品質:高で最適化します。このケースではファイルサイズは次のように7割ほどになりました。
grayImg.pdf: 327,580 optimizeImageGray.pdf:227,803