关于SVG转换png

   下面以FoxBPM项目中svg转换png参考。

   首先需要导入svg转换图片相关的jar包文件

		<!-- svg 相关jar -->
		<dependency>
			<groupId>org.apache.xmlgraphics</groupId>
			<artifactId>batik-transcoder</artifactId>
			<version>${batik.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.xmlgraphics</groupId>
			<artifactId>batik-bridge</artifactId>
			<version>${batik.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.xmlgraphics</groupId>
			<artifactId>batik-codec</artifactId>
			<version>${batik.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.xmlgraphics</groupId>
			<artifactId>batik-css</artifactId>
			<version>${batik.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.xmlgraphics</groupId>
			<artifactId>batik-svg-dom</artifactId>
			<version>${batik.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.xmlgraphics</groupId>
			<artifactId>batik-svggen</artifactId>
			<version>${batik.version}</version>
		</dependency>
		<!-- end svg 相关jar -->

   以上是maven项目中svg转换png需要的依赖配置,其中${batik.version}为版本号  

<properties>
    <batik.version>1.7</batik.version>
</properties>

   

   svg转换png的执行代码

/**
 * Copyright 1996-2014 FoxBPM ORG.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * @author yangguangftlp
 */
package org.foxbpm.engine.impl.util;

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

import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.PNGTranscoder;
import org.foxbpm.engine.exception.ExceptionCode;
import org.foxbpm.engine.exception.FoxBPMException;
import org.foxbpm.engine.exception.FoxBPMIllegalArgumentException;

/**
 * svg 转换操作工具类
 * 
 * @author yangguangftlp
 * @date 2014年7月17日
 */
public class SVGConverterUtil {

	/** 实例 */
	private static SVGConverterUtil instance;

	private SVGConverterUtil() {
	}

	/**
	 * 获取实例
	 * 
	 * @return 返回实例
	 */
	public static SVGConverterUtil getInstance() {
		if (null == instance) {
			synchronized (SVGConverterUtil.class) {
				if (null == instance) {
					instance = new SVGConverterUtil();
				}
			}
		}
		return instance;
	}

	/**
	 * 将svg转换成png svgCode参数不能为空
	 * 
	 * @param svgCode
	 *            svg 内容
	 * @throws FoxBPMException
	 * @return 返回转换后的png 字节数据
	 */
	public byte[] convertToPng(String svgCode) {
		// 创建内存输入流
		ByteArrayInputStream in = null;
		// 创建内存输出流
		ByteArrayOutputStream out = null;
		try {
			if (StringUtil.isEmpty(svgCode)) {
				throw new FoxBPMIllegalArgumentException(ExceptionCode.ILLEGALARGUMENTEXCEPTION_ISNULL, "svgCode is null !");
			}
			PNGTranscoder transcoder = new PNGTranscoder();
			in = new ByteArrayInputStream(svgCode.getBytes("utf-8"));
			out = new ByteArrayOutputStream(1024);
			transcoder.transcode(new TranscoderInput(in), new TranscoderOutput(out));
			out.flush();
			return out.toByteArray();
		} catch (Exception e) {
			throw new FoxBPMException(ExceptionCode.CONVERTERTER_SVG_ERROR, e);
		} finally {
			if (null != in) {
				try {
					in.close();
				} catch (IOException e) {
					throw new FoxBPMException(ExceptionCode.IO_CLOSE_ERROR, e);
				}
			}
			if (null != out) {
				try {
					in.close();
				} catch (IOException e) {
					throw new FoxBPMException(ExceptionCode.IO_CLOSE_ERROR, e);
				}
			}
		}
	}
}

猜你喜欢

转载自yangguangftlp.iteye.com/blog/2115265