ダウンサンプリング方法を指定します。
ダウンサンプリング方法を指定し、2.2.1 カラー画像最適化オプションの取得・指定と同様にして最適化します。ダウンサンプリングの種類は、バイリニア、バイキュービック、ニアレストネイバーの3種類で、ダウンサンプリングしないという設定も可能です。また、これ以降の項では全てカラー画像について各項の項目設定を行います。
PtlParamOptimizeImageDownSampling: 画像の最適化を表現したクラス
このクラスはすべての画像最適化クラスのベースクラスであるため、実際にはPtlParamOptimizeImageColor、PtlParamOptimizeImageGrayScale、PtlParamOptimizeImageMonoのいずれかに対してダウンサンプリングの指定を行うことになります。
PtlParamOptimizeImageDownSampling.APIsetDownSampling(PtlParamOptimizeImageDownSampling.DOWNSAMPLING_TYPE type): ダウンサンプリング方法を設定
ダウンサンプリング方法は次表の列挙型定数で指定します。
列挙型定数 | 説明 |
---|---|
DOWNSAMPLING_AVERAGE | バイリニア法 |
DOWNSAMPLING_BICUBIC | バイキュービック法 |
DOWNSAMPLING_NONE | ダウンサンプリングしない |
DOWNSAMPLING_SUBSAMPLING | ニアレストネイバー法 |
package cookbook; import jp.co.antenna.ptl.*; public class OptimizeImageSetDownSamplingType { // そのクラスのusageを表示する関数 private static void printUsage() { System.out.println("usage: java OptimizeImageSetDownSampling in-pdf-file" + " out-pdf-file downsampling-type"); System.out.println("downsampling-type:"); System.out.println("0:ダウンサンプリングしない 1:バイキュービック法" + " 2:バイリニア法 3:ニアレストネイバー法"); } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 3) { printUsage(); return; } // コマンドライン引数の取得 int downSamplingType = Integer.parseInt(args[2]); if((downSamplingType < 0) || (3 < downSamplingType)) { System.out.println("downsampling-type は0から3の範囲の整数値で指定してください。"); printUsage(); return; } try (PtlParamInput inputFile = new PtlParamInput(args[0]); PtlParamOutput outputFile = new PtlParamOutput(args[1]); PtlPDFDocument doc = new PtlPDFDocument()) { // PDFファイルをロードします。 doc.load(inputFile); // 画像の最適化を行います。 optimizeDocSetDownSamplingType(doc, downSamplingType); // ファイルに保存します。 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 optimizeDocSetDownSamplingType(PtlPDFDocument doc, int downSamplingType) throws PtlException{ try(PtlParamOptimize paramOptimize = new PtlParamOptimize(); // 画像最適化パラメーターの取得 // カラー画像最適化パラメーターの取得 PtlParamOptimizeImage paramOptimizeImage = paramOptimize.getParamOptimizeImage(); PtlParamOptimizeImageColor paramOptimizeImageColor = paramOptimizeImage.getParamOptimizeImageColor()) { // ダウンサンプリングのタイプを設定 switch(downSamplingType) { case 0: paramOptimizeImageColor.setDownSampling(PtlParamOptimizeImageDownSampling.DOWNSAMPLING_TYPE.DOWNSAMPLING_NONE); break; case 1: paramOptimizeImageColor.setDownSampling(PtlParamOptimizeImageDownSampling.DOWNSAMPLING_TYPE.DOWNSAMPLING_BICUBIC); break; case 2: paramOptimizeImageColor.setDownSampling(PtlParamOptimizeImageDownSampling.DOWNSAMPLING_TYPE.DOWNSAMPLING_AVERAGE); break; case 3: paramOptimizeImageColor.setDownSampling(PtlParamOptimizeImageDownSampling.DOWNSAMPLING_TYPE.DOWNSAMPLING_SUBSAMPLING); break; } // 最適化する画像の対象Filterを設定 paramOptimizeImage.setValidFilter(PtlParamOptimizeImage.FILTER_ALL & ~PtlParamOptimizeImage.FILTER_JBIG2Decode); // 画像のダウンサンプリングを行う最低サンプル数を設定 paramOptimizeImage.setMinSampleSize(110); // その他のダウンサンプリングの値を設定 paramOptimizeImageColor.setSourcePPI(150); paramOptimizeImageColor.setTargetPPI(75); paramOptimizeImageColor.setMinDownSamplingRate(0.65f); paramOptimizeImageColor.setCompress(PtlParamOptimizeImageColor.COMPRESS_TYPE.COMPRESS_AUTO); paramOptimizeImageColor.setQuality(PtlParamOptimizeImageColor.QUALITY_TYPE.QUALITY_MIDDLE); // 最適化の実行 doc.optimize(paramOptimize); } } }
OptimizeImageSetDownSamplingType.java
C:\samples>java cookbook.OptimizeImageSetDownSamplingType usage: java OptimizeImageSetDownSampling in-pdf-file out-pdf-file downsampling-type downsampling-type: 0:ダウンサンプリングしない 1:バイキュービック法 2:バイリニア法 3:ニアレストネイバー法 C:\samples>java cookbook.OptimizeImageSetDownSamplingType colorImg.pdf optimizeImageColor.pdf 2 -- 完了 --
colorImg.pdfの画像をバイリニア法でダウンサンプリングします。このケースではファイルサイズが1/3よりも小さくなります。
colorImg.pdf :500,898 optimizeImageColor.pdf:154,721