首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Apache Batik中将JPEG图像转换为SVG

在Apache Batik中将JPEG图像转换为SVG
EN

Stack Overflow用户
提问于 2016-06-20 00:41:40
回答 1查看 1.3K关注 0票数 1

我是Apache的新手,我想使用代码转换https://xmlgraphics.apache.org/batik/using/transcoder.html将JPEG图像转换成SVG图像。

这是我的代码:

代码语言:javascript
复制
public void saveAsSvg() throws Exception {

        SVGTranscoder t = new SVGTranscoder();

        t.addTranscodingHint(SVGTranscoder.KEY_FORMAT, true);

        String svgURI = new File(inputFilePath).toURL().toString();

        InputStream inputStream = new FileInputStream(inputFilePath);
        Reader inputStreamReader = new InputStreamReader(inputStream);
        TranscoderInput input = new TranscoderInput(inputStreamReader);

        OutputStream ostream = new FileOutputStream(outputFilePath);
        Writer outputStreamWriter = new OutputStreamWriter(ostream);
        TranscoderOutput output = new TranscoderOutput(outputStreamWriter);

        t.transcode(input, output);

        ostream.flush();
        ostream.close();
        System.exit(0);
    }

我的pom.xml是根据Convert a SVG image to a JPEG image using Apache Batik说的

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>batik-transcoder</artifactId>
    <version>1.7</version>
</dependency>

<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>batik-codec</artifactId>
    <version>1.7</version>
</dependency>

<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>xmlgraphics-commons</artifactId>
    <version>2.1</version>
</dependency>

我得到的例外情况如下:

代码语言:javascript
复制
org.apache.batik.transcoder.TranscoderException: element
    at org.apache.batik.transcoder.svg2svg.PrettyPrinter.fatalError(PrettyPrinter.java:1750) ~[batik-transcoder-1.7.jar:1.7+r608262]
    at org.apache.batik.transcoder.svg2svg.PrettyPrinter.print(PrettyPrinter.java:253) ~[batik-transcoder-1.7.jar:1.7+r608262]
    at org.apache.batik.transcoder.svg2svg.SVGTranscoder.prettyPrint(SVGTranscoder.java:230) ~[batik-transcoder-1.7.jar:1.7+r608262]
    at org.apache.batik.transcoder.svg2svg.SVGTranscoder.transcode(SVGTranscoder.java:186) ~[batik-transcoder-1.7.jar:1.7+r608262]
    at com.example.SaveAsJpeg.saveAsSvg(SaveAsJpeg.java:80) ~[classes/:na]

.

从我得到的例外中学不到任何东西。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2022-06-23 07:12:48

代码语言:javascript
复制
//Step 1
ImageIcon imageIcon = new ImageIcon(imagePath);
Image imageTmp = imageIcon.getImage();
//Step 2
BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), 
imageIcon.getIconHeight(),
BufferedImage.TYPE_INT_ARGB);

bufferedImage.getGraphics().drawImage(imageTmp, 0, 0, null);
//step 3
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "png", baos);
byte[] bytes = baos.toByteArray();
String imageEncode = "data:image/png;base64," + Base64.getEncoder().encodeToString(bytes);
baos.close();
bufferedImage.flush();

//step 4
Element image = document.createElementNS(SVGDOMImplementation.SVG_NAMESPACE_URI, "image");
//set X,Y,Width,Height ...
image.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", imageEncode);

您可以使用编码base64将图像转换为svg图像元素。

  1. 将图像读取到ImageIcon对象
  2. 从BuffredImage创建ImageIcon
  3. 将BuffredImage转换为编码Base64。
  4. 将图像编码放入标记中
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37913301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档