2.2.4 ダウンサンプリング方法の指定

2-2-第4項ダウンサンプリング方法の設定

狙い・効果

ダウンサンプリング方法を指定します。

処理の概要

ダウンサンプリング方法を指定し、2.2.1 カラー画像最適化オプションの取得・指定と同様にして最適化します。ダウンサンプリングの種類は、バイリニア、バイキュービック、ニアレストネイバーの3種類で、ダウンサンプリングしないという設定も可能です。また、これ以降の項では全てカラー画像について各項の項目設定を行います。

『PDF Tool API』の主な機能

PtlParamOptimizeImageDownSampling: 画像の最適化を表現したクラス

このクラスはすべての画像最適化クラスのベースクラスであるため、実際にはPtlParamOptimizeImageColor、PtlParamOptimizeImageGrayScale、PtlParamOptimizeImageMonoのいずれかに対してダウンサンプリングの指定を行うことになります。

PtlParamOptimizeImageDownSampling.APIsetDownSampling(PtlParamOptimizeImageDownSampling.DOWNSAMPLING_TYPE type): ダウンサンプリング方法を設定

ダウンサンプリング方法は次表の列挙型定数で指定します。

表2・9 PtlParamOptimizeImageDownSampling.DOWNSAMPLING_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