100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java图片转为矢量文件_java 通过batik 把svg格式的矢量图生成png图片

java图片转为矢量文件_java 通过batik 把svg格式的矢量图生成png图片

时间:2022-08-21 01:57:33

相关推荐

java图片转为矢量文件_java 通过batik 把svg格式的矢量图生成png图片

使用batik.jar文件把svg格式转换成png图片输出的方法如下:

1.首先需要下载batik

最新版本的batik jar包下载地址

batik介绍:

Batik,你可以在JAVA可以使用的地方操作SVG文档,您还可以在你的应用程序使用Batik模块来生成 , 处理和转码SVG图像。Batik很容易让基于Java的应用程序或小程序来处理SVG内容。 例如,使用Batik的SVG的发生器模块 ,Java应用程序或小程序可以很轻松地导出SVG格式的图形。

2.创建java类文件

代码如下:

import java.io.BufferedReader;

import java.io.ByteArrayInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.IOException;

import java.io.OutputStream;

import org.apache.batik.transcoder.TranscoderException;

import org.apache.batik.transcoder.TranscoderInput;

import org.apache.batik.transcoder.TranscoderOutput;

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

/**

* 将svg转换为png格式的图片

*

*

*/

public class SvgPngConverter {

/**

* 将svg字符串转换为png

*

* @param svgCode svg代码

* @param pngFilePath 保存的路径

* @throws TranscoderException svg代码异常

* @throws IOException io错误

*/

public static void convertToPng(String svgCode, String pngFilePath) throws IOException,

TranscoderException {

File file = new File(pngFilePath);

FileOutputStream outputStream = null;

try {

file.createNewFile();

outputStream = new FileOutputStream(file);

convertToPng(svgCode, outputStream);

} finally {

if (outputStream != null) {

try {

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/**

* 将svgCode转换成png文件,直接输出到流中

*

* @param svgCode svg代码

* @param outputStream 输出流

* @throws TranscoderException 异常

* @throws IOException io异常

*/

public static void convertToPng(String svgCode, OutputStream outputStream)

throws TranscoderException, IOException {

try {

byte[] bytes = svgCode.getBytes("utf-8");

PNGTranscoder t = new PNGTranscoder();

TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(bytes));

TranscoderOutput output = new TranscoderOutput(outputStream);

t.transcode(input, output);

outputStream.flush();

} finally {

if (outputStream != null) {

try {

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

public static void main(String[] args){

StringBuffer svgCode = new StringBuffer();

// File file = new File("C:\\svgcon.txt");

//

// try {

//BufferedReader br = new BufferedReader(new FileReader(file));

//String tempString = null;

//while((tempString = br.readLine()) != null){

//svgCode.append(tempString);

//}

//System.out.println("svg file content :" + svgCode.toString());

//br.close();

//}

//catch (Exception e1) {

TODO Auto-generated catch block

//e1.printStackTrace();

//}

svgCode.append("");

String pngFilePath = "C:\\Apache2.2\\htdocs\\images\\sss.png";

try {

convertToPng(svgCode.toString(), pngFilePath);

}

catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

catch (TranscoderException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

生成的内容是一条蓝色的直线

特别注意

svg标签上要加入xmlns属性 如下内容:

xmlns="/2000/svg"

如过svg标签没有添加这个xmlns属性会出现如下错误:

org.apache.batik.transcoder.TranscoderException: null

Enclosed Exception:

Root element namespace does not match that requested:

Requested: /2000/svg

Found: null

at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:136)

at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156)

at SvgPngConverter.convertToPng(SvgPngConverter.java:68)

at SvgPngConverter.convertToPng(SvgPngConverter.java:41)

at SvgPngConverter.main(SvgPngConverter.java:102)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。