`
D314123499
  • 浏览: 6137 次
  • 性别: Icon_minigender_1
  • 来自: 河北
文章分类
社区版块
存档分类
最新评论

amCharts导出图片JAVA实现

阅读更多

amCharts 是基于Flash的一套图表解决方法,界面比JFreeChart华丽很多,而且可以与用户交互,动画效果非常漂亮.官网:http://www.amcharts.com
About

AmCharts is a set of Flash charts for your websites and Web-based products. AmCharts can extract data from simple CSV or XML files, or they can read dynamic data generated with PHP, .NET, Java, Ruby on Rails, Perl, ColdFusion, and many other programming languages.
可见她很强大!

官网截图:


曲线图


柱状图


饼图

[img]http://yourgame.iteye.com/upload/picture/pic/20039/0fba1a10-9105-35bf-99c0-8ab1460e5ba6.gif [/img]
泡沫图


股票图


华丽的界面,非常的诱惑人,可是这个产品是要收费的,不过网上可以找到破解版本.
在官方的Demo很简单,大家可以下载来学习.不过我发现Demo中只有PHP,ASP.NET的导出图片示例,而没有JAVA导出图片的示例,我仿照ASP.NET的实现方法,做了一个JAVA导出的Demo!写得不怎么严谨,望大家多多指点


先看截图:

3D饼图


支持两种导出方式(设置很简单)


弹出保存对话框

[img]http://yourgame.iteye.com/upload/picture/pic/20047/472b70c3-06b8-3361-98ae-103b1111be89.gif [/img]
导出后的图片

图表的数据源:

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <pie>  
  3.     <slice title="中国" pull_out="true">27</slice>  
  4.     <slice title="美国" pull_out="false" alpha="80">16</slice>  
  5.     <slice title="德国" pull_out="false">8</slice>  
  6.     <slice title="韩国" pull_out="false">7</slice>  
  7.     <slice title="意大利" alpha="100">6</slice>  
  8. </pie>  
<?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代码 复制代码
  1. <html>  
  2.     <head>  
  3.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  4.         <title>2008年第29届北京奥运会金牌榜</title>  
  5.         <script type="text/javascript" src="ampie/swfobject.js"></script>  
  6.         <script type="text/javascript">  
  7.              function exportImage() {   
  8.                  var flashMovie = document.getElementById('ampie');   
  9.                  if (flashMovie) {   
  10.                     flashMovie.exportImage('servlet/ExportImage');    
  11.                  }   
  12.               }    
  13.         </script>  
  14.     </head>  
  15.   
  16.     <body>  
  17.         <div id="flashcontent">  
  18.             <strong>You need to upgrade your Flash Player</strong>  
  19.         </div>  
  20.         <script type="text/javascript">  
  21.             var so = new SWFObject("ampie/ampie.swf", "ampie", "400", "200", "8", "#FFFFFF");   
  22.             so.addVariable("path", "ampie/");   
  23.             so.addVariable("settings_file", escape("ampie/ampie_settings.xml"));   
  24.             so.addVariable("data_file", escape("ampie/ampie_data.xml"));   
  25.             so.addVariable("preloader_color", "#999999");   
  26.             so.write("flashcontent");   
  27.   
  28.         </script>  
  29.         <hr noshade size="1">  
  30.         <input type="button" value="导出图片" onclick="exportImage();" />  
  31.     </body>  
  32. </html>  
<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>



处理导出的Servlet:

Java代码 复制代码
  1. package org.lhq.ampie.demo;   
  2.   
  3. import java.awt.Graphics2D;   
  4. import java.awt.RenderingHints;   
  5. import java.awt.image.BufferedImage;   
  6. import java.io.IOException;   
  7.   
  8. import javax.imageio.ImageIO;   
  9. import javax.servlet.ServletException;   
  10. import javax.servlet.ServletOutputStream;   
  11. import javax.servlet.http.HttpServlet;   
  12. import javax.servlet.http.HttpServletRequest;   
  13. import javax.servlet.http.HttpServletResponse;   
  14.   
  15. import com.sun.image.codec.jpeg.JPEGCodec;   
  16. import com.sun.image.codec.jpeg.JPEGEncodeParam;   
  17. import com.sun.image.codec.jpeg.JPEGImageEncoder;   
  18.   
  19. /**  
  20.  * 这个Servlet处理图表页面传来的导出图片请求  
  21.  *   
  22.  * @author 廖瀚卿  
  23.  *   
  24.  */  
  25. @SuppressWarnings("serial")   
  26. public class ExportImage extends HttpServlet {   
  27.   
  28.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  29.             throws ServletException, IOException {   
  30.         this.doPost(request, response);   
  31.     }   
  32.   
  33.     public void doPost(HttpServletRequest request, HttpServletResponse response)   
  34.             throws ServletException, IOException {   
  35.         // 页面flash的宽度和高度   
  36.         int width = Integer.parseInt(request.getParameter("width"));   
  37.         int height = Integer.parseInt(request.getParameter("height"));   
  38.   
  39.         BufferedImage result = new BufferedImage(width, height,   
  40.                 BufferedImage.TYPE_INT_RGB);   
  41.         // 页面是将一个个像素作为参数传递进来的,所以如果图表越大,处理时间越长   
  42.         for (int y = 0; y < height; y++) {   
  43.             int x = 0;   
  44.             String[] row = request.getParameter("r" + y).split(",");   
  45.             for (int c = 0; c < row.length; c++) {   
  46.                 String[] pixel = row[c].split(":"); // 十六进制颜色数组   
  47.                 int repeat = pixel.length > 1 ? Integer.parseInt(pixel[1]) : 1;   
  48.                 for (int l = 0; l < repeat; l++) {   
  49.                     result.setRGB(x, y, Integer.parseInt(pixel[0], 16));   
  50.                     x++;   
  51.                 }   
  52.             }   
  53.         }   
  54.         response.setContentType("image/jpeg");   
  55.         response.addHeader("Content-Disposition",   
  56.                 "attachment; filename=\"amchart.jpg\"");   
  57.         Graphics2D g = result.createGraphics();   
  58.         // 处理图形平滑度   
  59.         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,   
  60.                 RenderingHints.VALUE_ANTIALIAS_ON);   
  61.         g.drawImage(result, 00, width, height, null);   
  62.         g.dispose();   
  63.   
  64.         ServletOutputStream f = response.getOutputStream();   
  65.         JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(f);   
  66.         JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(result);   
  67.         param.setQuality((float) (100 / 100.0), true);// 设置图片质量,100最大,默认70   
  68.         encoder.encode(result, param);   
  69.         ImageIO.write(result, "JPEG", response.getOutputStream());// 输出图片   
  70.         f.close();   
  71.     }   
  72.   
  73. }  

分享到:
评论

相关推荐

    Amcharts 的jsp ajax 实现 Myeclipse源代码工程

    Amcharts 的jsp ajax 实现 Myeclipse源代码工程 Amcharts 的jsp ajax 实现 Myeclipse源代码工程 Amcharts 的jsp ajax 实现 Myeclipse源代码工程 Amcharts 的jsp ajax 实现 Myeclipse源代码工程

    amcharts 图片导出格式解读

    总之,AmCharts的图片导出功能是通过前端和后端的协同工作来实现的,前端负责捕获用户操作和图表渲染,后端则处理数据转换和存储。`ChartImageExporter.java`作为后端的一部分,提供了将图表数据转化为可下载图片的...

    c#实现amcharts图片导出(.NET版)

    NULL 博文链接:https://alecrichard009.iteye.com/blog/1260172

    AmCharts的pie图例子,jsp实现

    本例子将详细介绍如何在JSP(JavaServer Pages)环境中使用AmCharts来创建一个饼图。 首先,我们需要理解AmCharts的基本工作原理。AmCharts是用JavaScript编写的,因此可以在任何支持JavaScript的网页上运行。它...

    amcharts控件

    4. **自定义样式**:开发者可以通过CSS样式表或API接口对图表的颜色、字体、边框等进行精细调整,实现个性化设计。 5. **数据处理**:AmCharts 支持JSON、XML等多种数据格式,且能方便地进行数据动态加载和更新。 ...

    “amcharts实现动态曲线”进一步解释

    我之前有上传了一个资源“amcharts实现动态曲线”,看到许多评论说不能运行,我在我的博客里面,http://blog.csdn.net/pair00/article/details/5837869有进一步的解释,并且有许多朋友留言改进的方案,只不过闲杂...

    amcharts 3D柱状图解说

    在本篇文章中,我们将深入探讨amCharts如何实现3D柱状图,并通过实际案例来理解其工作原理。 **一、amCharts简介** amCharts是一款基于SVG技术的图表库,支持多种浏览器和设备,包括桌面、移动设备甚至电视。它以...

    amcharts-3.20.20

    - **samples**:更多的示例代码,展示不同类型的图表配置和实现。 **应用场景** amCharts 适用于各种需要数据可视化的场景,如网站分析、商业报告、教育、科学展示等。通过结合实际数据和amCharts的功能,开发者...

    amcharts_3.17.3去除logo

    - **images**:存放图表中的图片资源,可能包括图标、背景或其他视觉元素。 - **amcharts**:此目录包含了`amcharts` 的核心库文件,如JavaScript和CSS文件。 - **samples**:可能包含各种示例代码和配置,用于展示`...

    amCharts开发实例

    了解了基本的使用方法后,开发者还可以深入研究amCharts的高级特性,如自定义图例、数据面板、导出功能、以及与其他库(如jQuery)的整合。同时,amCharts官方提供详尽的文档、示例代码和社区支持,可以帮助开发者...

    HTML5图表amCharts教程下载

    主要的,我们只要整理好要显示的数据,就可以了,数据的格式目前支持 XML 和 CSV 格式的文件,数据可以静态提供好,也可以和服务器交付,动态生成,我们可以在 JAVA 类文件中根据相应统计条件,生成所需的数据,然后...

    asp.net 图表控件 amCharts

    6. **强大的API和文档支持**:amCharts提供了详尽的API文档和示例代码,帮助开发者快速上手并实现复杂的功能。 **二、amCharts的使用步骤** 1. **引用库文件**:从提供的压缩包中,我们看到包含"am.Charts.dll"和...

    amcharts官方离线文档

    **AmCharts离线文档详解** AmCharts是一款强大的JavaScript图表库,它提供了丰富的图表类型和高度定制的功能,使得在Web应用中创建交互式、可视化数据变得轻而易举。这款库适用于各种项目,从简单的个人博客到复杂...

    Amcharts flash版

    4. `images`:这个目录可能包含了AmCharts图表中用到的各种图像资源,如图标、背景图片等,用于增强图表的视觉效果。 5. `amcharts`:这很可能是AmCharts库的核心代码文件,包括类、函数和其他实现图表功能的组件。 ...

    amcharts的柱状图 asp.net版

    6. **导出功能**:AmCharts提供了一个插件,让用户能够将图表导出为PNG、JPEG、PDF或SVG格式。 综上所述,AmCharts在ASP.NET中创建柱状图是一种高效且灵活的方式,它允许开发者构建具有丰富视觉效果和交互功能的...

    amcharts3D flex帮助文档

    4. **数据绑定**: Flex中的数据绑定机制可以将图表直接与后台数据源连接,实现数据的实时更新。 5. **自定义与扩展**: 开发者可以通过覆盖默认行为、添加自定义事件处理程序和扩展现有组件,对amCharts的功能进行...

    amcharts 折线图 asp.net版

    在ASP.NET环境下使用AmCharts创建折线图,不仅可以实现动态数据展示,还能通过丰富的API和配置选项打造出极具交互性的用户体验。这种结合使得开发者能够轻松地将复杂的数据以直观、吸引人的形式呈现给用户,提升网站...

Global site tag (gtag.js) - Google Analytics