SVG Salamander image
Я пытался обработать и растеризовать SVG-файл с помощью SVG Salamander & 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 и добавляет уникальные идентификаторы ко всем тегам. Второй метод случайным образом выбирает набор этих идентификаторов, выбирает соответствующий tspan и устанавливает атрибут fill (до тех пор, пока здесь все не работает нормально, некоторая отладка показала мне, что я получил правильный tspan и атрибут fill установлен правильно), а затем растеризует SVG. Вот где начинается проблема: в результате.pngs не показывают измененные цвета шрифта (цвета текста просто черный, даже tspan, который окрашен желтым цветом в примере xml, как-то "изменен" на черный. Некоторые тесты показали мне, он даже не показывает измененное текстовое содержимое 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"));
...
Вы видите что-нибудь, что могло бы объяснить мою проблему до сих пор? Любая помощь приветствуется!
Ps: Если я помещаю красный прямоугольник в SVG с помощью Illustrator, этот прямоугольник также становится красным в результирующем.png. Так что каким-то образом проблема только влияет на tspans или теги, которые я "касаюсь" в моей программе...