将SVG转换为PNG时得到空白图片

5

我正在尝试生成一个SVG图像,然后使用Apache Batik将其转码为PNG。但是,最终我得到了一张空白的图片,而我不知道原因。

我使用SVGDomImplementation中的Document作为我的转码基础(以避免将SVG写入磁盘并再次加载它)。以下是一个示例:

  DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation();
  String namespace = SVGDOMImplementation.SVG_NAMESPACE_URI;
  Document document = domImpl.createDocument(namespace, "svg", null);

  //stuff that builds SVG (and works)

  TranscoderInput transcoderInput = new TranscoderInput(svgGenerator.getDOMFactory());
  PNGTranscoder transcoder = new PNGTranscoder();
  transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, new Float(svgWidth));
  transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, new Float(svgHeight));

  try {
     File temp = File.createTempFile(key, ".png");
     FileOutputStream outputstream = new FileOutputStream(temp); 

     TranscoderOutput output = new TranscoderOutput(outputstream);

     transcoder.transcode(transcoderInput, output);
     outputstream.flush();
     outputstream.close();
     name = temp.getName();
  } catch (IOException ioex) {
     ioex.printStackTrace();
  } catch (TranscoderException trex) {
     trex.printStackTrace();
  }

我的问题是生成的图像为空,我不知道原因。有什么提示吗?

1个回答

1

我认为这取决于您如何创建SVG文档。您正在使用什么svgGenerator(我假设它是一个SVGGraphics2D)?

TranscoderInput transcoderInput = new TranscoderInput(svgGenerator.getDOMFactory());

如果您已经在document中构建了SVG文档,则应将其传递给TranscoderInput构造函数。 此页面提供了将SVG DOM光栅化为JPEG的示例。

正确的,svgGenerator 是一个 SVGGraphics2D。getDOMFactory() 返回与我在方法开头创建的相同的文档/对象,因此没有任何区别。我已经多次检查了 JPEG 示例。也许仅将该示例更改为 PNG 不足以解决问题(我实际上并没有测试过那个特定的示例),也许 PNG 转换器需要一些我没有看到的其他 / 额外设置。我以其他方式解决了我的实际问题(正确地将 SVG 放入 PDF 中),因此不再需要这个。 - fiskeben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接