5.3.1 画像が持っているマスクのタイプを取得

GetImageMaskType_Top

狙い・効果

画像が持つ画像マスクのタイプを取得します。

処理の概要

取得できるマスクのタイプはカラーキーマスク、明示マスク、ソフトマスク、ステンシルマスクです。(各マスクのタイプの詳細については「『PDF CookBook』(第1巻)2.2 画像描画」の「2.2.7 マスク処理:ステンシルマスク」~「2.2.10 マスク処理:ソフトマスク」を参照してください。)

サンプルプログラムでは入力PDFに含まれるすべての画像に対して、マスクが設定されているかどうか、設定されている場合はどのタイプのマスクが設定されているかを取得して表示します。

『PDF Tool API』の主な機能

表5.1 PtlEditImage.MASK_TYPEの種別
列挙型定数
マスクのタイプ
MASK_COLORKEY
カラーキーマスク
MASK_EXPLICIT
明示マスク
MASK_NONE
マスク無し
MASK_SOFT
ソフトマスク
MASK_STENCIL
ステンシルマスク

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;


public class GetImageMaskType {

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

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

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

            try (PtlPages pages = doc.getPages()) { //ページコンテナの取得
                // ページコンテナが空かどうか
                if (pages.isEmpty()) {
                    System.err.println("入力PDFのページコンテナが空");
                    return;
                }

                // それ以外であれば指定ページ番号を検索。
                int wholePageNum = doc.getPageCount();
                for(int i = 0; i < wholePageNum; i++) {
                    // ページの取得(index番号は0が先頭のため1を引く)
                    try (PtlPage page = pages.get(i)) {
                        System.out.println("このPDFの"+
                                        i +"ページ目の画像の情報を読み取ります。");
                        // 画像情報の読み取り
                        getImageMaskType(page);
                    }
                }
            }
        }
	...【GetPDFVersion.javaと同じ処理のため省略
	   ・エラーメッセージ処理と出力】...
    }

    public static void getImageMaskType(PtlPage page)
        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のエラー処理


            // 画像エレメントの取得
            for(int i = 0; i < numElems; i++){
                System.out.println("画像のインデックス番号:" + i);

                //各エレメントの処理
                try (PtlEditElement elem = elems.get(i)) {
                    boolean isImage = false;
                    //エレメントが画像であるかの判定
                    switch (elem.getType()) {
                    case TYPE_IMAGE:
                        isImage = true;
                        break;
                    default:
                        System.out.println("指定されたエレメントは画像ではありません。");
                        break;
                    }

                    if(isImage) {
                        try(PtlEditImage elemImage = (PtlEditImage)elem) {
                            switch (elemImage.getMaskType()) {
                            case MASK_COLORKEY:
                                System.out.println("この画像にはカラーキーマスクが設定されています。");
                                break;
                            case MASK_EXPLICIT:
                                System.out.println("この画像には明示マスクが設定されています。");
                                break;
                            case MASK_NONE:
                                System.out.println("この画像にはマスクが設定されていません。");
                                break;
                            case MASK_SOFT:
                                System.out.println("この画像にはソフトマスクが設定されています。");
                                break;
                            case MASK_STENCIL:
                                System.out.println("この画像にはステンシルマスクが設定されています。");
                                break;
                            //どのマスクタイプでもなかった場合の処理
                            default:
                                System.out.println("マスクのタイプ情報を読み取れませんでした。");
                                break;
                            }
                        }
                    }
                }
            }
        }
    }
}

プログラムファイル名

GetImageMaskType.java

入出力操作の例

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

C:\samples>java cookbook.GetImageMaskType sample_multiJPGs.pdf 
このPDFの0ページ目の画像の情報を読み取ります。
画像のインデックス番号:0
この画像にはマスクが設定されていません。
画像のインデックス番号:1
この画像にはマスクが設定されていません。
このPDFの1ページ目の画像の情報を読み取ります。
画像のインデックス番号:0
この画像にはマスクが設定されていません。
画像のインデックス番号:1
この画像にはソフトマスクが設定されています。
-- 完了 --

この操作例では画像にソフトマスクが設定されているのが確認できます。