指定したドキュメントのグレースケール画像を最適化グレースケール画像について最適化します。
最適化するグレースケール画像の圧縮形式、画像品質について指定し、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