ここ数日、SVG Salamander & Java を使用して svg ファイルを処理およびラスタライズしようとしましたが、うまく動作しません。
これは、Adobe Illustrator によって生成された私の SVG ファイルです。基本的に、ランダムなテキストが含まれており、tspan の 1 つが黄色のテキストを表示するようにスタイル設定されています。
私のプログラムでは、tspan テキストの色の一部を変更してから、svg を .png としてラスタライズすることを目指しています。最初の 1 つの方法は、SVG ドキュメント ツリーを走査し、すべてのタグに一意の ID を追加します。2 番目の方法では、これらの ID のセットをランダムに選択し、それに応じた tspan を選択して、fill 属性を設定します (ここまではすべて正常に動作しているように見えますが、デバッグによって、正しい tspan を取得し、fill 属性が正しく設定されていることがわかりました)。 svg をラスタライズします。ここから問題が始まります: 結果として得られる .png には、変更されたフォントの色が表示されません (テキストの色は単純な黒であり、例の 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またはタグにのみ影響するようです...