amCharts 是基于Flash的一套图表解决方法,界面比JFreeChart华丽很多,而且可以与用户交互,动画效果非常漂亮.官网:http://www.amcharts.com
w_e_ibo:
http://t.cn/zjqEaRh
http://weibo.com/liao27
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 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>
处理导出的Servlet:
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最大,默认70
encoder.encode(result, param);
ImageIO.write(result, "JPEG", response.getOutputStream());// 输出图片
f.close();
}
}
分享到:
相关推荐
总之,AmCharts的图片导出功能是通过前端和后端的协同工作来实现的,前端负责捕获用户操作和图表渲染,后端则处理数据转换和存储。`ChartImageExporter.java`作为后端的一部分,提供了将图表数据转化为可下载图片的...
他负责了业务模块的设计、权限管理、待办任务管理,用SpringMail发送提醒邮件,Quartz框架实现定时任务,POI技术处理数据导出,Redis用于菜单智能展示,而统计分析则可能借助amCharts等工具实现动态图表。...
1、文件说明: Centos8操作系统subunit-devel-1.4.0-14.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf subunit-devel-1.4.0-14.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
TIA_Portal_V19_HSP.zip
自己搭建的无人机跟踪实验,主要讲软件,硬件的需要等等,为初学者提供学习建议及需要学习的内容,讲解使用到的代码等.zip
1、文件说明: Centos8操作系统stunnel-5.56-5.el8_3.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf stunnel-5.56-5.el8_3.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
内容概要:本文详细介绍了西门子S7-1200 PLC与ABB ACS510变频器通过Modbus协议进行通讯的方法。首先讲解了硬件连接,包括RS485通讯线的正确接法和终端电阻的使用。接着深入探讨了PLC程序的设计,涵盖Modbus主站的初始化、参数读写(如频率设定、启停控制)、以及错误处理方法。同时,提供了触摸屏(WinCC Basic)的操作指导,包括变量关联、按钮绑定和数据显示。最后给出了常见问题的解决方案,确保通讯稳定可靠。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是需要进行PLC与变频器通讯调试的工作人员。 使用场景及目标:适用于需要将西门子PLC与ABB变频器进行Modbus通讯的应用场合,帮助工程师快速掌握通讯配置、参数设置、启停控制及触摸屏集成的具体步骤,提高工作效率并减少调试时间。 其他说明:文中提供了详细的代码示例和注意事项,有助于读者更好地理解和应用相关技术。此外,强调了硬件检查的重要性,避免因接线问题导致的通讯失败。
Zwift离线版-Windows端教程
2023-04-06-项目笔记-第四百五十一阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.449局变量的作用域_449- 2025-03-28
学习资料:十六届蓝桥杯单片机模拟赛资源包
内容概要:本文详细解析了超轨双光PID和RIC二光PID两种开源控制程序的设计思路和实现细节。首先介绍了超轨双光PID程序的核心计算方法,包括PID计算、误差获取以及参数整定等方面的内容。接着探讨了RIC二光PID程序的独特之处,如误差合成、参数自适应和遗忘因子的应用。文中强调了积分项防爆处理、微分项灵敏度提升、传感器布局优化等关键技术点,并提供了调试建议和实践经验。此外,还讨论了增量式PID结构、状态观测器、PWM占空比转换等实用技巧。 适合人群:对机器人控制领域感兴趣的初学者和技术爱好者,尤其是希望深入了解PID控制算法的人群。 使用场景及目标:适用于需要理解和实现PID控制算法的实际工程项目,特别是涉及双光传感器的小车控制系统。目标是帮助读者掌握PID控制的基本原理和高级优化技巧,提高系统的稳定性和响应速度。 其他说明:文中提供的代码片段和调试建议非常实用,建议读者在实践中结合这些内容进行实验和调试,以便更好地理解PID控制的工作机制。
putty0.80CN-X64本地记录
1、文件说明: Centos8操作系统subunit-1.4.0-14.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf subunit-1.4.0-14.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
内容概要:本文详细介绍了如何利用Matlab 2016a的Simulink工具箱搭建IEEE RBTS BUS4标准电力系统仿真模型。首先,文章讲解了系统的基本结构和主要元件的参数设置方法,如主变压器、母线、输电线路等。其次,针对测量模块的布置进行了指导,确保能够精确获取电压和电流数据。再次,探讨了故障注入的方法及其对系统的影响,包括三相短路故障的设置和效果分析。此外,还讨论了分布式电源(如光伏)的接入方式以及其对系统稳定性的影响。最后,提供了批量仿真和数据采集的一些实用技巧。 适合人群:从事电力系统研究和技术开发的专业人士,尤其是有一定Matlab/Simulink使用经验的研究人员。 使用场景及目标:①帮助研究人员快速掌握IEEE RBTS BUS4标准系统的建模方法;②提供详细的故障注入和分布式电源接入案例,便于理解和应用;③通过具体实例展示如何优化系统性能,提高仿真精度。 其他说明:文中不仅包含了具体的参数设定和代码片段,还有许多实践经验分享,有助于读者更好地理解和运用所学知识进行实际项目开发。
zhengquan看看看咯
计算机概论教学课件.pdf
LanQiaoCup-master-蓝桥杯刷题项目
matlab
内容概要:本文档详细介绍了一款基于C语言的单片机红外遥控系统的设计与实现。项目旨在通过单片机平台实现对家电设备的高效、稳定、低成本的红外遥控控制。系统设计涵盖了硬件电路设计、软件架构、信号处理、功耗管理、抗干扰设计等方面。文中详细介绍了各个功能模块的具体实现,包括系统初始化、红外信号接收与解码、控制逻辑、红外信号发射等。此外,文档还探讨了系统的可扩展性,提出了多项创新和技术改进的方向,如多设备控制、语音识别、无线网络控制、自学习功能等。 适合人群:具备一定单片机基础知识的研发人员,特别是对嵌入式系统设计、红外通信技术感兴趣的工程师。 使用场景及目标:①学习单片机与红外遥控技术的基础理论和实际应用;②掌握嵌入式系统设计的方法和技巧,特别是在信号处理、功耗优化等方面的实践经验;③为智能家居、家庭娱乐系统等领域的产品开发提供参考。 其他说明:文档不仅提供了详细的硬件电路设计和软件代码实现,还包括了GUI设计的要求和具体实现步骤。此外,文档还强调了系统的可扩展性和未来改进方向,如集成更多传感器、云平台与大数据分析、机器学习等先进技术,以提升系统的智能化水平。