2.2.10 マスク処理:ソフトマスク

images/AddImageSetSoftMask-top.png

狙い・効果

ソフトマスクは地となる画像の上にマスク画像を重ねて指定します。グレースケール画像でグラデーションの掛かったマスクができます。

処理の概要

ソフトマスクでグラデーションを掛けたマスク処理を表現できます。 PDF文書に地となるラスター画像を貼り付けます。マスク画像としてグレースケール画像を指定します。このときdrawImage()メソッドで挿入されるのは、マスク処理されたラスター画像です。またこの際、マスク画像は地となるラスター画像に大きさが揃えられます。

なお、マスク画像にカラー画像が指定された場合、グレー画像に変換された上でマスク処理されます。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;


public class AddImageSetSoftMask {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 4)
        {
            System.out.println("usage: java cookbook.AddImageSetSoftMask in-pdf-file out-pdf-file insert-image-file mask-file");
            return;
        }


        ...【AppendPages.javaと同じ処理のため省略
             ・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード
             ・PtlParamOutputを用いて出力PDF名を指定】...


            //コマンドライン引数の取得
            String imageURI = args[2];
            int numPages = doc.getPageCount();
            System.out.println("ページ数:" + numPages);
            String softMaskFile = args[3];


        ...【RemovePages.javaと同じ処理のため省略
             ・doc.getPages()メソッドを用いてPtlPages pagesにページコンテナを取得
             ・ページコンテナが空だった場合にエラーを出力して終了】...


                try (PtlPage page = pages.get(0);// 先頭ページの取得(パラメータindexは0が先頭)
                     PtlContent content = page.getContent();// ページコンテントの取得
                     PtlRect outputRect = page.getViewBox(); // 出力矩形の設定。(ページの大きさを得るためにViewBoxを取得する)
                     PtlParamInput insertImage = new PtlParamInput(imageURI); //画像指定に使うパラメータクラス
                     PtlParamInput insertMask = new PtlParamInput(softMaskFile);
                     PtlParamDrawImage paramDrawImage = new PtlParamDrawImage()) //画像の描画に使うパラメータクラス
                {
                    //入力画像ストリームの設定
                    paramDrawImage.setImageStream(insertImage);
                    paramDrawImage.setMaskImageStream(insertMask, PtlParamDrawImage.MASK_TYPE.MASK_SOFT);
                    // 画像出力
                    content.drawImage(outputRect, PtlContent.ALIGN.ALIGN_CENTER, paramDrawImage);
                }
            }


        ...【AppendPages.javaと同じ処理のため省略
             ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力
             ・PtlException, Exception, Error を catchするエラー処理
             ・finally文で"--完了--"と表示する処理】...

    }
}

プログラムファイル名

AddImageSetSoftMask.java

入出力操作の例

C:\samples>java cookbook.AddImageSetSoftMask 
usage: java cookbook.AddImageSetSoftMask in-pdf-file out-pdf-file insert-image-file mask-file

C:\samples>java cookbook.AddImageSetSoftMask A4sample.pdf A4-soft.pdf JpegImageSQ.jpg mask_gray.bmp 
ページ数:1
-- 完了 --

ソフトマスクは明示マスクと似ていますが、マスクとしてグレースケール画像を使えます。次はグラデーションを付けた画像をマスクとして使用した例です。

images/AddImageSetSoftMask-example.png

マスク画像(グラデーション画像)の周囲の罫線はマスク画像の一部ではありません。マスク画像の大きさが分かるように追加したものです。

図2・18 ソフトマスクの適用例