Locked History Actions

Batik

Batik

リンク

使い方

ここでは、SVGファイル(あるいはSVGのJava文字列)を読み込み、画像(PNG等)データを出力する方法について調べてみる。 可能であれば、SVGのDOMを操作し、例えば特定の要素の色を変更したあとで画像を出力する。

必要なものと簡単なプログラム

ここではMavenやIvyでの依存解決は行わない。

あとは、http://xmlgraphics.apache.org/batik/using/transcoder.htmlのサンプル通りのプログラムを書けば動作する。

変換パラメータの設定

サンプルはJPEGへの変換の場合だが(JPEGTranscoder)、このほかにPNGTranscoderとTIFFTranscoderがある。 また、各トランスコーダで共通のものと固有のパラメータ設定がある。以下のドキュメントに記述がある。

共通のパラメータについては、例えばこれらの上位クラスである

に記述がある。例えば、PNG生成時にイメージの幅を60にするには、

    PNGTranscoder t = new PNGTranscoder();
    t.addTranscodingHint(SVGAbstractTranscoder.KEY_WIDTH, new Float(60));

などとする。

SVGの操作

上記ではファイル等からSVGを読み込み、それをそのまま画像にしていたが、読み込んだSVGに何らかの操作を施してから画像を作成したい。 以下のようにする。

    // ファイルを読み込み、Documentを作成する
    String parser = XMLResourceDescriptor.getXMLParserClassName();
    SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
    Document doc = f.createDocument(new File("some.svg").toURI().toString());

    // Documentに対する操作を行う

    // Documentを指定してTranscoderInputを作成する
    JPEGTranscoder t = new JPEGTranscoder();
    t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(.8));     
    t.addTranscodingHint(SVGAbstractTranscoder.KEY_WIDTH, new Float(60));
    TranscoderInput input = new TranscoderInput(doc);

クリッピング

これはDOM操作の範疇だが、SVGの一部にクリッピングして画像を生成するには、例えば以下のような操作を行う。

    Node node = doc.getChildNodes().item(0);
    SVGOMSVGElement svg = (SVGOMSVGElement)node;
    svg.setAttribute("viewBox", "0, 0, 25, 25");