读书人

JSP导出amchart 图片(参照)

发布时间: 2012-09-07 10:38:15 作者: rapoo

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最大,默认70encoder.encode(result, param);ImageIO.write(result, "JPEG", response.getOutputStream());// 输出图片f.close();}}

?

读书人网 >JavaScript

热点推荐