1

在过去的几天里,我一直在尝试使用 SVG Salamander 和 Java 处理和光栅化 svg 文件,但无法让它工作。

这是我的 SVG 文件,由 Adob​​e Illustrator 生成。它基本上包含一些随机文本,其中一个 tspan 被设置为显示黄色文本。

通过我的程序,我的目标是更改一些 tspan 文本颜色,然后将 svg 光栅化为 .png。第一种方法遍历 SVG 文档树并将唯一的 id 添加到所有标签。第二种方法随机选择一组这些 id,选择相应的 tspan 并设置填充属性(直到这里一切似乎都工作正常,一些调试显示我得到了正确的 tspan 并且填充属性设置正确)然后栅格化 svg。这是问题开始的地方:生成的 .pngs 不显示更改的字体颜色(文本颜色只是纯黑色,即使示例 xml 中的黄色 tspan 以某种方式“更改”为黑色。一些测试告诉我, 它甚至不显示更改的 tspan 文本内容。下面是设置属性和渲染的代码:

 <?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>

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"));

到目前为止,您有什么可以解释我的问题的吗?任何帮助表示赞赏!

Ps:如果我使用 Illustrator 在 SVG 中放置一个红色矩形,则该矩形在生成的 .png 中也是红色的。所以不知何故,这个问题似乎只影响我在我的程序中“触摸”的 tspan 或标签......

4

0 回答 0