论坛首页 Web前端技术论坛

基于servlet导出Flex/Flash界面为图形文件的简单方法

浏览 6201 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-15  

使用flash能做出很好的界面或者图表(chart),但是如何将这些内容保存成图片呢,这个问题是个值得考虑的难题。本文将简单的描述一下解决思路并给出代码。

1。第一步:获取要导出的flash图形数据
 通过AS3的bitmapdata类将界面上某个要截取的diplayobject转换为ByteArray,通过ExternalInterface传递给html页面中的表单。

2。第二步:将转换的位图数据传递到后台
 这个是最难的部分,如果采用flex的数据服务则代价昂贵,如果采用amfphp/openphp又比较麻烦,那怎么办呢?
 解决方法:将bytearray编码为base64的字符串进行http传递。

3。第三步:将客户端传来的数据转换为图形文件
 既然前端传来的是base64字符串,那就需要基于java的base64解码方法,然后转换为byte[],这样就可以生成图形文件了。

下面给出需要的资源:

a)bitmapdata转换为图形ByteArray的类:

http://www.kaourantin.net/2005/10/png-encoder-in-as3.html
http://www.kaourantin.net/2005/10/more-fun-with-image-formats-in-as3.html

b)bytearray转换为base64编码的类:

http://www.dynamicflash.com/goodies/base64

c)解码base64字符串为byte[]的类:

http://www.source-code.biz/snippets/java/2.htm

 


 

 

   发表时间:2007-09-17  
第二步是不是可以直接把PNG图像数据byteArray通过http上传的方式上传到servlet,直接生成png图不是一样的吗?为什么还要进行编码转化.
   好遗憾现在as3.0还没有jpg的decoder.如果有就好了,flash就可以接受图像数据进行解码显示了.
0 请登录后投票
   发表时间:2007-09-17  
你说的方法也可行,只是我没有想到如何传递这个bytearray到后台,这里的这个方法应该是你说的方案:
用URLRequest保存图片
但是感觉这个方法,有点抽象而且繁琐,我只使用urlrequest就可以将图片保存到客户端或者服务端,不需要loader。
0 请登录后投票
   发表时间:2007-09-18  
为什么要base64编码呢,粗粗看了一下,你的方案和在评论里面提到那篇文章的区别在于它直接用字节流传输了,这样更直接。
req.contentType = 'application/octet-stream';
0 请登录后投票
   发表时间:2007-09-18  
可能我没仔细叙述我的需求,我是要实现类似于这样的过程:
AS3-->HTML form to submit-->servlet-->client save file dialog
即点击flash上面的按钮,或者点击html的一个按钮,就要将图形文件返回到客户端进行保存提示,我想了一下,觉得html form只能以string的形式接收图片数据,所以就做了base64的转码处理。

大家认为这样如何?
0 请登录后投票
   发表时间:2007-09-18  
如果没有防火墙之类限制的话,那么Raw Socket应该也可以吧
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics