2.2.1 カラー画像最適化オプションの取得・指定

2-2-第1項カラー画像最適化オプションの取得・指定

狙い・効果

指定したドキュメントのカラー画像を最適化カラー画像について最適化します。

処理の概要

カラー画像について圧縮形式、画像品質について指定して最適化し、最適化後のファイルを出力します。画像の圧縮形式は、自動、JPEG、JPEG2000、ZLIB、元のままの5種から選択します。画像品質は、最高、高、中、低、最低の5種から選択します。

その他のパラメータについては以下の値をデフォルト値としてプログラム内で指定して最適化を行います。これらデフォルト値は2.2.2 グレースケール画像最適化オプションの取得・指定2.2.3 モノクロ画像最適化オプションの取得・指定でも共通で使用します。各設定項目の詳細については第4項以降で説明します。

表2・3 画像を最適化のデフォルト値
ダウンサンプリング条件
これ以上のPPIならダウンサンプリングを行うPPI値150
ダウンサンプリング後のPPI値75
ダウンサンプリング方法バイキュービック法
ダウンサンプリング率の下限値0.65

PDF Tool APIの主な機能

PtlPDFDocument.APIoptimize(PtlParamOptimize paramOptimize): PDFを最適化する

PtlParamOptimize: 最適化に使うパラメータクラス

PtlParamOptimizeImage.APIgetParamOptimizeImage( ): 画像最適化オプションを取得

PtlParamOptimizeImage: 画像の最適化に使うパラメータクラス

PtlParamOptimizeImage.APIgetParamOptimizeImageColor ( ): カラー画像最適化オプションを取得

PtlParamOptimizeImageColor: カラー画像の最適化を表現したクラス

PtlParamOptimizeImageColor.APIsetCompress(PtlParamOptimizeImageColor.COMPRESS_TYPE type): 圧縮方法を設定

圧縮方法は次表の列挙型定数で指定します。

表2・4 PtlParamOptimizeImageColor.COMPRESS_TYPE 圧縮方法
列挙型定数説明
COMPRESS_AUTO自動
COMPRESS_JPEG2KJPEG2000
COMPRESS_JPEGJPEG
COMPRESS_SAME元のまま
COMPRESS_ZLIBZLIB

PtlParamOptimizeImageColor.APIsetQuality(PtlParamOptimizeImageColor.QUALITY_TYPE quality): 画像品質を設定

画像品質は次表の列挙型定数で指定します。

表2・5 PtlParamOptimizeImageColor.QUALITY_TYPE 画像品質
列挙型定数説明
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