因为flash不能访问客户端的文件系统,所以不能像AIR应用那样来保存图片,在flex中保存图片要借助服务器端来实现。我先简单描述一下思路。
首先通过一个Image组件获得该图片,然后用BitmapData的draw()方法来加载该图片,再把它转换成字节数组,把该字节数组发给服务器端,服务器接受到该字节数组,通过该字节数组来生成图片,然后保存在一个路径下。
把图片转换成字节数组要用到编码器,在mx.graphics.codec包下有mx.graphics.codec.PNGEncoder和mx.graphics.codec.JPEGEncoder两个编码器,前者用来给png图片编码,后者用来给jpg图片编码。操作相应的图片要选择相应的编码器,(似乎没有对gif图片进行编码的类,怎样操作gjf图片我还不清楚)下面我用java的servlet来做后台,(.net和php其实思想一样)给出前后台的所有代码。(我用png来说明,jpg其实一个道理)
mxml:
<mx:Application>
<mx:Script>
<![CDATA[
//这里可以添加2个方法,来监听出错和完成,我没有写
//loader.addEventListener(Event.COMPLETE, loaderComplete);
//loader.addEventListener(IOErrorEvent.IO_ERROR, loadeIOError);
}
<mx:Image id="bitImg" src="E:/1.png"
/>
<mx:Button label="save" click="saveImg()"/>
</mx:Application>
java:我就直接给出servlet和web.xml配置文件
private void doPost(HttpServletRequest req, HttpServletResponse resp) {
// TODO Auto-generated method stub
String path = "E:/2.png";//
把刚才的1.png存一个2.png
try{
BufferedInputStream inputStream = new BufferedInputStream(req.getInputStream());
FileOutputStream outputStream = new FileOutputStream(new File(path));
byte [] bytes = new byte[1024];
int v;
while((v=inputStream.read(bytes))>0){
outputStream.write(bytes,0,v);
}
outputStream.close();
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
web.xml
<script type="text/javascript" id="wumiiRelatedItems"> </script>