【发布时间】:2017-08-04 21:49:21
【问题描述】:
我正在使用 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;
}
}
在同一个.svg 文件上使用AndroidSVG library 会生成具有正确颜色的正确.png 图像。
另一个注释;使用inkscape(我用来创建矢量图的程序)的默认字体解决了这个问题。使用任何其他字体会导致 Batik 将其颜色更改为黑色。
【问题讨论】:
-
发布 SVG,或者至少是其中的一部分,这样我们就可以看到其中可能导致问题的内容。
-
@PaulLeBeau 给你:pastebin.com/XmLwKdWd