把flex组件导出图像

来源:互联网 发布:淘宝联盟收入怎么提现 编辑:程序博客网 时间:2024/06/05 16:03
    昨天写了个FLEX导出EXCEL的例子,今天写一个FLEX导出图像的例子,其实原理一样,都是通过服务端进行。
注意把组件处理为图像的类库要下载下来,http://code.google.com/p/as3corelib/
flex把组件处理为图像字节流的类ExplortImage.as
  1. package utils
  2. {
  3.     import com.adobe.images.JPGEncoder;
  4.     
  5.     import flash.display.BitmapData;
  6.     import flash.net.URLRequest;
  7.     import flash.net.URLRequestMethod;
  8.     import flash.net.navigateToURL;
  9.     import flash.utils.ByteArray;
  10.     
  11.     import mx.core.UIComponent;
  12.         
  13.     public class ExportImage
  14.     {
  15.         public function ExportImage()
  16.         {
  17.         }
  18.         /**
  19.          * 把图像发送到服务端,转为图像输出
  20.          */ 
  21.         public function sendImageByte(target:UIComponent,url:String):void {  
  22.             var request:URLRequest = new URLRequest(url);  
  23.             request.contentType = 'applicatoin/octet-stream';  
  24.             request.data = getJPGByteArray(target);  
  25.             request.method = URLRequestMethod.POST;
  26.             navigateToURL(request, "_blank");  
  27.         }
  28.         /**
  29.          * 把目标组件转换为图像数组
  30.          */ 
  31.         private function getJPGByteArray(target:UIComponent):ByteArray {  
  32.             var bitmapData : BitmapData = new BitmapData(target.width, target.height);  
  33.             bitmapData.draw(target);   
  34.                  
  35.             var jpg : JPGEncoder = new JPGEncoder(80);  
  36.             var jpgByteArray : ByteArray = jpg.encode(bitmapData);  
  37.             return jpgByteArray;  
  38.         } 
  39.     }
  40. }
表现层自己随便写什么什么东西进去都行test.mxml吧
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="700" height="620" showCloseButton="true" close="PopUpManager.removePopUp(this)">
  3. <mx:Script>
  4.     <![CDATA[
  5.         import utils.ExportImage;
  6.         
  7.         private var exportImage:ExportImage=new ExportImage;
  8.     ]]>
  9. </mx:Script>
  10.     <mx:ViewStack x="0" y="0" id="vs_chart" width="100%" height="100%" creationPolicy="all">
  11.         <mx:Canvas id="cv_column" label="柱型图" width="100%" height="100%">
  12.             <mx:ColumnChart id="ch_column" showDataTips="true" top="91" right="10" bottom="153" left="200">
  13.             </mx:ColumnChart>
  14.             <mx:Legend dataProvider="{ch_column}" direction="horizontal" x="200" y="55"/>
  15.             <mx:Label x="200" y="27" text="柱状图" id="lb_imgInfo"/>
  16.             <mx:Label x="325" y="27" text="开始时间:2008-03-14" id="lb_startTime"/>
  17.             <mx:Label x="531" y="27" text="结束时间:2008-12-24" id="lb_endTime"/>
  18.             <mx:DataGrid id="db_info" left="10" top="438" bottom="0" right="10">
  19.             </mx:DataGrid>
  20.             <mx:Button x="482" y="55" label="导出图像" click="exportImage.sendImageByte(cv_column,'http://192.168.0.114/exportImage.php')"/>
  21.             <mx:Panel title="数据来源" borderThicknessLeft="1" borderAlpha="1" borderThicknessRight="1" top="91" left="10" bottom="183" right="502" cornerRadius="4" layout="absolute" backgroundAlpha="1.0">
  22.                 <mx:Text id="txt_dataCome" top="10" left="10" right="10" bottom="10"/>
  23.             </mx:Panel>
  24.         </mx:Canvas>
  25.         <mx:Canvas id="cv_pie" label="饼型图" width="100%" height="100%">
  26.             <mx:PieChart id="ch_pie" showDataTips="true" left="10" top="48" right="10" bottom="138">
  27.                 <mx:series>
  28.                     <mx:PieSeries  nameField="xaxis" field="value"/>
  29.                 </mx:series>
  30.             </mx:PieChart>
  31.             <mx:Legend id="le_pie" dataProvider="{ch_pie}" x="10" y="48"/>
  32.             <mx:Panel layout="absolute" title="数据来源" top="462" left="10" right="10" bottom="10">
  33.                 <mx:Text x="10" y="10" id="txt_pieDataCome"/>
  34.             </mx:Panel>
  35.             <mx:Label x="24" y="19" text="饼状图" id="lb_pieImgInfo"/>
  36.             <mx:Label x="208" y="19" text="开始时间:2008-03-14" id="lb_pieStartTime"/>
  37.             <mx:Label x="364" y="19" text="结束时间:2008-12-24" id="lb_pieEndTime"/>
  38.             <mx:Button x="534" y="17" label="导出图像" click="exportImage.sendImageByte(cv_pie,'http://192.168.0.114/exportImage.php')"/>
  39.         </mx:Canvas>
  40.     </mx:ViewStack>
  41. </mx:TitleWindow>
下面就是服务端的代码了,非常简单,是把FLEX发过来的数据转为图像输出。

  1. <?
  2. if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
  3. {
  4.           $jpg = $GLOBALS["HTTP_RAW_POST_DATA"];
  5.           header('Content-Type: image/jpeg');
  6.           header("Content-Disposition: attachment; filename=".time().".jpg");
  7.           echo $jpg;
  8. }
  9. ?>

原创粉丝点击