1

次のコードを使用してsvgファイルを生成しました。

public class TestSVGGen {

        static BufferedImage img;

        public void paint(SVGGraphics2D g2d) {
                g2d.setPaint(Color.red);
                g2d.fill(new Rectangle(10, 10, 100, 100));
                g2d.drawImage(img, 0, 0, img.getWidth() ,img.getHeight(), null);
                g2d.setSVGCanvasSize(new Dimension(img.getWidth(), img.getHeight()));
        }

        public static void main(String[] args) throws IOException {

                img = ImageIO.read(TestSVGGen.class.getClassLoader().getResourceAsStream("images/test_offscreen.jpg"));

                // Get a DOMImplementation.
                DOMImplementation domImpl = GenericDOMImplementation
                                .getDOMImplementation();

                // Create an instance of org.w3c.dom.Document.
                String svgNS = "http://www.w3.org/2000/svg";
                Document document = domImpl.createDocument(svgNS, "svg", null);

                // Create an instance of the SVG Generator.
                SVGGraphics2D svgGenerator = new SVGGraphics2D(document);


                // Ask the test to render into the SVG Graphics2D implementation.
                TestSVGGen test = new TestSVGGen();
                test.paint(svgGenerator);

                // Finally, stream out SVG to the standard output using
                // UTF-8 encoding.
                boolean useCSS = true; // we want to use CSS style attributes
                File file = new File("image.svg");
                FileOutputStream fos = new FileOutputStream(file);
                Writer out = new OutputStreamWriter(fos, "UTF-8");
                svgGenerator.stream(out, useCSS);


        }

ここで、含まれている画像のサイズをこのサイズに変更したいので、この画像キャンバスのサイズを18,000 * 18000のサイズに変更したいのですが、次のコード(コードの一部のみ)を試すたびに

svgCanvas.setSize(new Dimension(18000, 18000));

プログラムがメモリ不足の例外をスローします。

指定された大きなサイズにサイズを変更するにはどうすればよいですか、画像のタイリングやセグメンテーションなどの回避策はありますか?

私はバティックにとても慣れていないので私を助けてください

4

1 に答える 1

1

batikのcontribディレクトリからTiledImageTranscoderfromを使用して問題を解決し、メモリ不足エラーなしで成功した結果を取得しました。

上記のクラスは、ECLIPSEIDEから実行するときに一度にわずか35MBのメモリを使用し、イメージファイルをディスクに完全に書き込むために私のマシンで30秒かかります。

結果はTIFFにあります。

于 2013-03-16T17:03:30.267 に答える