2.3.1 JPEG圧縮設定

2-3-第1項JPEG圧縮設定

狙い・効果

画像に対してJPEG圧縮を行います。

処理の概要

カラー及びグレースケール画像に対してJPEG圧縮を行うようオプションで指定し、2.2.1 カラー画像最適化オプションの取得・指定と同様にして最適化します。また、JPEG圧縮による効果を確認できるよう、ダウンサンプリングは行わずJPEG圧縮のみ行うように設定しています。

PDF Tool APIの主な機能

PtlParamOptimizeImageColor.APIsetCompress(PtlParamOptimizeImageColor.COMPRESS_TYPE.COMPRESS_JPEG): JPEG形式で圧縮する

PtlParamOptimizeImageGrayScale.APIsetCompress(PtlParamOptimizeImageColor.COMPRESS_TYPE.COMPRESS_JPEG): JPEG形式で圧縮する

それぞれのJPEG圧縮処理はダウンサンプリングと同時に行われます。

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class CompressImageByJPEG {

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java CompressImageByJPEG in-pdf-file out-pdf-file");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 2)
        {
            printUsage();
            return;
        }

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlParamOutput outputFile = new PtlParamOutput(args[1]);
             PtlPDFDocument doc = new PtlPDFDocument())
        {
            // PDFファイルをロードします。
            doc.load(inputFile);

            // 最適化の実行
            compressImageByJPEG(doc);

            // ファイルに保存します。
            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("-- 完了 --");
        }
    }

    /**
     * そのPDF文書の画像をJPEG圧縮する。
     * @param doc 処理を行うPDFの文書を表現したクラス
     * @throws PtlException PdfToolAPIを実行するときに発生した例外
     */
    public static void compressImageByJPEG(PtlPDFDocument doc) throws PtlException {
        // 画像最適化パラメーターの取得
        // カラー画像最適化パラメーターの取得
        // グレースケール画像最適化パラメーターの取得
        try (PtlParamOptimize paramOptimize = new PtlParamOptimize();
             PtlParamOptimizeImage paramOptimizeImage =
             paramOptimize.getParamOptimizeImage();
             PtlParamOptimizeImageColor paramOptimizeImageColor =
             paramOptimizeImage.getParamOptimizeImageColor();
             PtlParamOptimizeImageGrayScale paramOptimizeImageGrayScale =
             paramOptimizeImage.getParamOptimizeImageGrayScale()) {

            paramOptimizeImageColor.setDownSampling(PtlParamOptimizeImageDownSampling.DOWNSAMPLING_TYPE.DOWNSAMPLING_NONE);
            paramOptimizeImageColor.setCompress(PtlParamOptimizeImageColor.COMPRESS_TYPE.COMPRESS_JPEG);
            paramOptimizeImageColor.setQuality(PtlParamOptimizeImageColor.QUALITY_TYPE.QUALITY_MIDDLE);

            paramOptimizeImageGrayScale.setDownSampling(PtlParamOptimizeImageDownSampling.DOWNSAMPLING_TYPE.DOWNSAMPLING_NONE);
            paramOptimizeImageGrayScale.setCompress(PtlParamOptimizeImageGrayScale.COMPRESS_TYPE.COMPRESS_JPEG);
            paramOptimizeImageGrayScale.setQuality(PtlParamOptimizeImageGrayScale.QUALITY_TYPE.QUALITY_MIDDLE);

            // 最適化する画像の対象Filterを設定
            paramOptimizeImage.setValidFilter(PtlParamOptimizeImage.FILTER_ALL & ~PtlParamOptimizeImage.FILTER_JBIG2Decode);

            //各要素の最適化フラグを設定
            paramOptimize.setRemoveOpenAction(true);
            paramOptimize.setRemoveOutlines(true);
            paramOptimize.setRemoveAnnots(true);
            paramOptimize.setRemoveArticles(true);
            paramOptimize.setRemoveThumbnails(true);

            // 最適化
            doc.optimize(paramOptimize);
        }
    }
}

プログラムファイル名

CompressImageByJPEG.java

入出力操作の例

C:\samples>java cookbook.CompressImageByJPEG 
usage: java CompressImageByJPEG in-pdf-file out-pdf-file

C:\samples>java cookbook.CompressImageByJPEG colorImg.pdf compressImageByJPEG.pdf 
-- 完了 --