我一直在尝试使用SVG Salamander& amp;来处理和栅格化svg文件。 Java在过去的几天里无法让它工作。
这是我的SVG文件,由Adobe Illustrator生成。它基本上包含一些随机文本,其中一个tspans被设计为显示黄色文本。
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="595.28px" height="841.89px" viewBox="0 0 595.28 841.89" enable-background="new 0 0 595.28 841.89" xml:space="preserve">
<text transform="matrix(1 0 0 1 117 180)"><tspan x="0" y="0" font-family="'MyriadPro-Regular'" font-size="12">asdfasdfasdfasdfasdfasdfasdf</tspan><tspan x="0" y="14.4" font-family="'MyriadPro-Regular'" font-size="12">asdfiausldöfjaöljfdölajsdf</tspan><tspan x="0" y="28.8" font-family="'MyriadPro-Regular'" font-size="12">adsfal+sdfajksdflkasdf</tspan><tspan x="0" y="57.6" fill="#FFDE17" font-family="'MyriadPro-Regular'" font-size="12">asdlfköajsdöfjkaölsdfj</tspan></text>
</svg>
使用我的程序,我的目标是更改一些tspan文本颜色,然后将svg光栅化为.png。第一种方法遍历SVG文档树,并为所有标记添加唯一ID。第二种方法随机选择一组这些id,选择相应的tspan并设置fill属性(直到这里一切似乎工作正常,一些调试显示我得到了正确的tspan并且fill属性被正确设置)然后光栅化svg。这里是问题的开始:结果.pngs没有显示改变的字体颜色(文本颜色只是纯黑色,甚至在示例xml中以黄色着色的tspan也以某种方式“改变”为黑色。一些测试显示我,它甚至没有显示tspan的更改文本内容。以下是执行设置属性和渲染的代码:
...
SVGElement element = tempDiagram.getElement(String.valueOf(curId));
if (!element.hasAttribute("fill", AnimationElement.AT_CSS)) {
element.addAttribute("fill", AnimationElement.AT_CSS, "#ff0000");
} else {
element.setAttribute("fill", AnimationElement.AT_CSS, "#ff0000");
}
tempDiagram.updateTime(0f);
BufferedImage bi = new BufferedImage(2480,3508,BufferedImage.TYPE_INT_ARGB);
Graphics2D ig2 = bi.createGraphics();
ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
ig2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
tempDiagram.render(ig2);
ImageIO.write(bi, "png", new File("test" + String.valueOf(i) + ".png"));
...
到目前为止,您是否看到任何可以解释我问题的内容? 任何帮助表示赞赏!
P.s:如果我使用Illustrator在SVG中放置一个红色矩形,则矩形在生成的.png中也是红色的。所以这个问题似乎只会影响我在程序中“触摸”的tspans或标签......