最近领导要求把flash生成的图表存成图片,使用的是openflashchart,百度后才发现本身就有导出图片功能(孤陋寡闻了-_-!!)。
openflashchart导出的是BASE64编码的字符串,如果要保存文件,这就需要用后台进行解码,然后再保存。
话不多说,上代码:
<script type="text/javascript" src="js/swfobject.js"></script>
<div id="mychart"></div>
<script>
function show_swf(AreaStr){
swfobject.embedSWF(
"charts/open-flash-chart-new.swf",
"mychart",
330,
120,
"9.0.0",
"charts/expressinstall.swf",
{"data-file":"PriceString.zhtml?Areaname="+AreaStr},
{"wmode" : "transparent"});
}
//抓图
OFC = {};
OFC.jquery = {
name: "jQuery",
version: function(src) { return $('#' + src)[0].get_version() },
rasterize: function(src, dst) { $('#' + dst).replaceWith(OFC.jquery.image(src)) },
image: function(src) { return "<img src='https://img-blog.csdnimg.cn/2022011111413278406.png'#' + src)[0].get_img_binary() + "' />" },
popup: function(src) {
var img_win = window.open('', 'Image')
with (img_win.document) {
write('<html><head><title>Tipsdoo Chart Report Image</title></head><body>' + OFC.jquery.image(src) + '</body></html>')
}
img_win.document.close();
}
}
if (typeof (Control == "undefined")) { var Control = { OFC: OFC.jquery} }
function save_image() {
$.ajax({
type:"POST",
url:"SaveImage.Base64ToImage",
data:"imgstr="+$('#mychart')[0].get_img_binary(),
success:function(re){
}
});
//OFC.jquery.popup('mychart')
}
function moo() { alert(99); };
</script>
<input type="button" name="btncopy" οnclick="OFC.jquery.rasterize('mychart', 'ImagePanel');save_image();" value="生成图片" />
后台代码:
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import sun.misc.BASE64Decoder;
public void Base64ToImage(String ImageStr){
//对字节数组字符串进行Base64解码并生成图片
if (ImageStr == null) //图像数据为空
return;
BASE64Decoder decoder = new BASE64Decoder();
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(ImageStr);
for(int i=0;i<b.length;++i)
{
if(b[i]<0)
{//调整异常数据
b[i]+=256;
}
}
//生成jpeg图片
String imgFilePath = "c:\\abc.png";//新生成的图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
}
catch (Exception e)
{
return;
}
}