2.2.3 モノクロ画像最適化オプションの取得・指定

2-2-第3項モノクロ画像最適化オプションの取得・指定

狙い・効果

指定したドキュメントのモノクロ画像を最適化モノクロ画像について最適化します。

処理の概要

最適化するモノクロ画像の圧縮形式について指定し、2.2.1 カラー画像最適化オプションの取得・指定と同様にして最適化します。モノクロ画像とは、白と黒の2種だけの情報で表現された画像のことです。画像の圧縮形式は、自動、CCITT Group 3、CCITT Group 4、RunLength、ZLIB、元のままの6種から選択します。JBIG2もキーワード指定はできますが、未対応のため自動と同じ扱いになります。ご注意ください。

『PDF Tool API』の主な機能

PtlParamOptimizeImage.APIgetParamOptimizeImageMono( ): モノクロ画像最適化オプションを取得

PtlParamOptimizeImageMono: モノクロ画像の最適化を表現したクラス

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

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

表2・8 PtlParamOptimizeImageMono.COMPRESS_TYPE 圧縮方法
列挙型定数説明
COMPRESS_AUTO自動
COMPRESS_CCITT3CCITT Group 3
COMPRESS_CCITT4CCITT Group 4
COMPRESS_JBIG2JBIG2(未対応)
COMPRESS_RUNLENGTHRunLength
COMPRESS_SAME元のまま
COMPRESS_ZLIBZLIB

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class OptimizeImageMono {

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java OptimizeImageMono in-pdf-file out-pdf-file" +
                           " 圧縮方法");
        System.out.println("圧縮方法:");
        System.out.println("0:元のまま 1:お任せ 2:\ "CCITT Group 3\ " 3:\ "CCITT Group 4\ "" +
                           " 4:JBIG2 5:RunLength 6:ZLIB");
    }
    /**
     * @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) || (6 < compressType)) {
            System.out.println("圧縮方法 は0から6の範囲の整数値で指定してください。");
            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);

            // ファイルに保存します。
            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)
        throws PtlException{
        try(PtlParamOptimize paramOptimize = new PtlParamOptimize();
            // 画像最適化パラメーターの取得
            // カラー画像最適化パラメーターの取得
            PtlParamOptimizeImage paramOptimizeImage =
            paramOptimize.getParamOptimizeImage();
            PtlParamOptimizeImageMono paramOptimizeImageMono =
            paramOptimizeImage.getParamOptimizeImageMono()) {

            // 圧縮方法を設定
            switch(compressType) {
            case 0:
                paramOptimizeImageMono.setCompress(PtlParamOptimizeImageMono.COMPRESS_TYPE.COMPRESS_SAME);
                break;
            case 1:
                paramOptimizeImageMono.setCompress(PtlParamOptimizeImageMono.COMPRESS_TYPE.COMPRESS_AUTO);
                break;
            case 2:
                paramOptimizeImageMono.setCompress(PtlParamOptimizeImageMono.COMPRESS_TYPE.COMPRESS_CCITT3);
                break;
            case 3:
                paramOptimizeImageMono.setCompress(PtlParamOptimizeImageMono.COMPRESS_TYPE.COMPRESS_CCITT4);
                break;
            case 4:
                paramOptimizeImageMono.setCompress(PtlParamOptimizeImageMono.COMPRESS_TYPE.COMPRESS_JBIG2);
                break;
            case 5:
                paramOptimizeImageMono.setCompress(PtlParamOptimizeImageMono.COMPRESS_TYPE.COMPRESS_RUNLENGTH);
                break;
            case 6:
                paramOptimizeImageMono.setCompress(PtlParamOptimizeImageMono.COMPRESS_TYPE.COMPRESS_ZLIB);
                break;
            }
            // 最適化する画像の対象Filterを設定
            paramOptimizeImage.setValidFilter(PtlParamOptimizeImage.FILTER_ALL &
                                              ~PtlParamOptimizeImage.FILTER_JBIG2Decode);
            // 画像のダウンサンプリングを行う最低サンプル数を設定
            paramOptimizeImage.setMinSampleSize(110);
            paramOptimizeImageMono.setSourcePPI(200);
            paramOptimizeImageMono.setTargetPPI(150);
            paramOptimizeImageMono.setDownSampling(PtlParamOptimizeImageDownSampling.DOWNSAMPLING_TYPE.DOWNSAMPLING_BICUBIC);
            paramOptimizeImageMono.setMinDownSamplingRate(0.65f);
            // 最適化の実行
            doc.optimize(paramOptimize);
        }
    }
}

プログラムファイル名

OptimizeImageMono.java

入出力操作の例

C:\samples>java cookbook.OptimizeImageMono 
usage: java OptimizeImageMono in-pdf-file out-pdf-file圧縮方法
圧縮方法:
0:元のまま 1:お任せ 2:"CCITT Group 3" 3:"CCITT Group 4" 4:JBIG2 5:RunLength 6:ZLIB

C:\samples>java cookbook.OptimizeImageMono monoImg.pdf optimizeImageMono.pdf 5 
-- 完了 --

monoImg.pdfの画像を圧縮方法:RunLengthで最適化します。このケースではファイルサイズはほんの少し小さくなるだけです。

monoImg.pdf:          224,494 
optimizeImageMono.pdf:218,365