日期:2014-05-16  浏览次数:20310 次

JSP导出amchart 图片(参考)
源数据:
<?xml version="1.0" encoding="UTF-8"?>
<pie>
	<slice title="中国" pull_out="true">27</slice>
	<slice title="美国" pull_out="false" alpha="80">16</slice>
	<slice title="德国" pull_out="false">8</slice>
	<slice title="韩国" pull_out="false">7</slice>
	<slice title="意大利" alpha="100">6</slice>
</pie>

?

前台
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>2008年第29届北京奥运会金牌榜</title>
		<script type="text/javascript" src="ampie/swfobject.js"></script>
		<script type="text/javascript">
			 function exportImage() {
			 	 var flashMovie = document.getElementById('ampie');
		         if (flashMovie) {
		            flashMovie.exportImage('servlet/ExportImage'); 
		         }
		      } 
		</script>
	</head>

	<body>
		<div id="flashcontent">
			<strong>You need to upgrade your Flash Player</strong>
		</div>
		<script type="text/javascript">
			var so = new SWFObject("ampie/ampie.swf", "ampie", "400", "200", "8", "#FFFFFF");
			so.addVariable("path", "ampie/");
			so.addVariable("settings_file", escape("ampie/ampie_settings.xml"));
			so.addVariable("data_file", escape("ampie/ampie_data.xml"));
			so.addVariable("preloader_color", "#999999");
			so.write("flashcontent");

		</script>
		<hr noshade size="1">
		<input type="button" value="导出图片" onclick="exportImage();" />
	</body>
</html>

?

后台:

package org.lhq.ampie.demo;

import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * 这个Servlet处理图表页面传来的导出图片请求
 * 
 * @author 廖瀚卿
 * 
 */
@SuppressWarnings("serial")
public class ExportImage extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 页面flash的宽度和高度
		int width = Integer.parseInt(request.getParameter("width"));
		int height = Integer.parseInt(request.getParameter("height"));

		BufferedImage result = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		// 页面是将一个个像素作为参数传递进来的,所以如果图表越大,处理时间越长
		for (int y = 0; y < height; y++) {
			int x = 0;
			String[] row = request.getParameter("r" + y).split(",");
			for (int c = 0; c < row.length; c++) {
				String[] pixel = row[c].split(":"); // 十六进制颜色数组
				int repeat = pixel.length > 1 ? Integer.parseInt(pixel[1]) : 1;
				for (int l = 0; l < repeat; l++) {
					result.setRGB(x, y, Integer.parseInt(pixel[0], 16));
					x++;
				}
			}
		}
		response.setContentType("image/jpeg");
		response.addHeader("Content-Disposition",
				"attachment; filename=\"amchart.jpg\"");
		Graphics2D g = result.createGraphics();
		// 处理图形平滑度
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);
		g.drawImage(result, 0, 0, width, height, null);
		g.dispose();

		ServletOutputStream f = response.getOutputStream();
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(f);
		JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(result);
		param.setQuality((float) (100 / 100.0), true);// 设置图片质量,100