2010-02-12 94 views
11

我试图缩放图像,修改它,然后输出到另一个图像格式。到目前为止,我一直在使用apache batik库。为了简单转换,这很容易。为了剪裁svg,这很容易。在Java中缩放SVG

但是,我似乎无法弄清楚如何缩放到由svg创建的完整图像。也就是说,我可以将感兴趣的区域指定为边界矩形,然后对边界矩形进行缩放,但是我不知道如何在svg的图像上进行缩放。

这是我到目前为止有:

... 
//set the output width and height 
transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, new Float(newSize.width)); 
transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, new Float(newSize.height)); 

//set the aoi for scaling. Unsure what to do here. 
transcoder.addTranscodingHint(PNGTranscoder.KEY_AOI, new Rectangle(0, 0, 100, 100)); 
... 

回答

7

如果不设置KEY_AOI代码转换提示,则根<svg>元素的viewBox=""属性将被用来确定感兴趣的区域。如果您正在转码的文档没有viewBox=""属性,那么将使用width=""height=""属性,因此AOI将为(0,0,宽度,高度)。

如果没有设置这些参数,并且您事先不知道图形在文档坐标系内的哪个位置,则可以计算根元素的边界框并将其用作AOI。您可以通过首先"booting the DOM"为您的文档执行此操作,然后在文档元素上调用getBBox()

+0

因为我会处理各种SVG图像,所以我可能不得不完成所有这些。感谢您及时的回复。我会接受一次,我可以测试这个。 – 2010-02-13 01:42:01

+0

@heycam请帮我在这个问题上http://stackoverflow.com/questions/15286536/outofmemory-while-resizing-svg-file-using-apache-batik – Mihir 2013-03-08 04:14:22