2.1.4 画像の大きさ、解像度を取得

2-1-第4項画像の大きさ、解像度を取得

狙い・効果

画像の大きさを取得画像の幅、高さ、PPIを取得します。

『PDF Tool API V7.0』以降のバージョンでは画像が持っているマスクのタイプを取得できるようになりました。詳細は「『PDF CookBook』(第5巻)5.3 画像情報取得の機能追加」を参照して下さい。

処理の概要

2.1.2 指定した画像を抽出と同様にして指定されたインデックス番号の画像エレメントを取得し、その幅、高さ、PPIを取得して表示します。

『PDF Tool API』の主な機能

PtlEditImage.APIgetHeight(): 画像の高さ(Pixel)を取得

PtlEditImage.APIgetWidth(): 画像の幅(Pixel)を取得

PtlEditImage.APIgetPPI(): 画像解像度を取得

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class GetImageInfo {

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

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

        // コマンドライン引数の取得
        int pageOfImage = Integer.parseInt(args[1]);
        int imageIndexNum = Integer.parseInt(args[2]);

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

            try (PtlPages pages = doc.getPages()) { // ページコンテナの取得
                // ページコンテナが空かどうか
                if (pages.isEmpty()) {
                    System.out.println("ページコンテナが空");
                    return;
                }
                // それ以外であれば指定ページ番号を検索。
                int wholePageNum = doc.getPageCount();
                //pageToSearchのエラー処理
                if(wholePageNum < pageOfImage) {
                    System.out.println("ERROR: page-of-image はPDFの総ページ数より"+
                                       "小さい値を指定してください。");
                    System.out.println("総ページ数:" + wholePageNum);
                    printUsage();
                    return;
                }
                // ページの取得(index番号は0が先頭のため1を引く)
                try (PtlPage page = pages.get(pageOfImage - 1)) {
                    System.out.println("このPDFの"+ pageOfImage +"ページ目・Index番号 " +
                                       imageIndexNum + "の画像の情報を読み取ります。");
                    // 画像情報の読み取り
                    getImageInfo(page, imageIndexNum);
                }
            }
        }

	...【ExtractText.javaと同じ処理のため省略
	 ・エラーメッセージ処理と出力】...

    }

    public static void getImageInfo(PtlPage page, int imageIndexNum)
        throws PtlException, Exception, Error {
        // ページコンテント・画像エレメントの取得
        try (PtlContent content = page.getContent();
             PtlEditElements elems = content.getEditElements(PtlContent.GET_IMAGE)) {
            int numElems = elems.getCount();
            if (numElems == 0) {
                System.out.println("指定されたページに画像エレメントがありませんでした。");
                return; // 画像エレメントが無い場合はreturnする
            }
            //imageIndexNumのエラー処理
            if(numElems < imageIndexNum) {
                System.out.println("ERROR: image-index-numは対象ページの総画像数より"+
                                   "小さい値を指定してください。");
                System.out.println("総画像数:" + numElems);
                printUsage();
                return;
            }
            // OUTPUT_FORMATはFORMAT_AUTOで設定。
            PtlEditImage.OUTPUT_FORMAT format = PtlEditImage.OUTPUT_FORMAT.FORMAT_AUTO;
            // 画像エレメントの取得
            try (PtlEditElement elem = elems.get(imageIndexNum - 1)) {
                PtlEditElement.ELEMENT_TYPE type = elem.getType();
                switch (type) {
                case TYPE_IMAGE:
                    PtlEditImage elemImage = (PtlEditImage)elem;
                    System.out.println("画像の高さ:" + elemImage.getHeight());
                    System.out.println("画像の幅 :" + elemImage.getWidth());
                    System.out.println("画像のPPI :" + elemImage.getPPI());
                    break;
                default:
                    System.out.println("指定されたエレメントは画像ではありません。");
                    break;
                }
            }
        }
    }
}

プログラムファイル名

GetImageInfo.java

入出力操作の例

C:\samples>java cookbook.GetImageInfo 
usage: java GetImageInfo in-pdf-filepage-of-image image-index-num

C:\samples>java cookbook.GetImageInfo colorImg.pdf 1 2 
このPDFの1ページ目・Index番号 2の画像の情報を読み取ります。
画像の高さ:729
画像の幅 :1117
画像のPPI :220
-- 完了 --