gpt4 book ai didi

svg - batik 无法渲染正确的字体颜色?

转载 作者:行者123 更新时间:2023-12-04 20:36:19 25 4
gpt4 key购买 nike

我正在使用 Apache Batik Java 库来转换 .svg矢量图像文件到 .png文件。问题在于字体颜色生成的 .png图像都变黑了。这是我用来进行转换的代码:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.PNGTranscoder;

public class SVGHelperDesktop extends SVGHelper {
@Override
public byte[] convertSvgToPng(String svgXml, float png_width)
throws SVGConversionException {
byte[] resultPngBytes = null;

try {
ByteArrayInputStream inputSvgBytes = new
ByteArrayInputStream(svgXml.getBytes());
TranscoderInput input_svg_image = new
TranscoderInput(inputSvgBytes);

ByteArrayOutputStream outputPngBytes = new ByteArrayOutputStream();
TranscoderOutput output_png_image = new TranscoderOutput(outputPngBytes);

PNGTranscoder svgToPngConverter = new PNGTranscoder();
svgToPngConverter.addTranscodingHint(PNGTranscoder.KEY_WIDTH, png_width);
svgToPngConverter.transcode(input_svg_image, output_png_image);

resultPngBytes = outputPngBytes.toByteArray();

outputPngBytes.flush();
outputPngBytes.close();
} catch (Exception e) {
throw new SVGConversionException("Error converting SVG to PNG", e);
}

return resultPngBytes;
}
}

使用 AndroidSVG library同上 .svg文件生成正确的 .png具有正确颜色的图像。

另一个注意事项;使用默认字体 inkscape (我用来创建矢量图形的程序)解决了这个问题。使用任何其他字体会导致 Batik 将其颜色更改为黑色。

Here's a link to my SVG file.

最佳答案

Inkscape 添加了自定义 CSS 属性,-inkscape-font-specification , 到 style与自定义字体文本关联的属性。这是摘录:

style="...;-inkscape-font-specification:'Aharoni, Bold';..."
已知 batik bug阻止呈现以连字符 ( - ) 开头的 CSS 属性。
一个简单的解决方法是编辑文件,然后删除“-inkscape-font-specification”属性。
或者,您可以使用 Batik 的 API 创建一个新的 CSS 样式解析器,以删除有问题的 CSS 样式类。例如:
  /**
* <a href="https://issues.apache.org/jira/browse/BATIK-1112">Bug fix</a>
*/
public static final class InkscapeCssParser extends Parser {
public void parseStyleDeclaration( final String source )
throws CSSException, IOException {
super.parseStyleDeclaration(
source.replaceAll( "-inkscape-font-specification:[^;\"]*;", "" )
);
}
}

static {
XMLResourceDescriptor.setCSSParserClassName(
InkscapeCssParser.class.getName()
);
}

关于svg - batik 无法渲染正确的字体颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com