[ActionScript 3.0] AS利用ByteArray向PHP发送二进制数据生成图片

flash as3向php发送二进制数据,通过php保存成图片。

AS端:

 1 package 
 2 {
 3     import com.JPEGEncoder.JPGEncoder;
 4     import flash.display.Bitmap;
 5     import flash.display.BitmapData;
 6     import flash.display.DisplayObject;
 7     import flash.display.Loader;
 8     import flash.display.Sprite;
 9     import flash.events.Event;
10     import flash.net.URLLoader;
11     import flash.net.URLLoaderDataFormat;
12     import flash.net.URLRequest;
13     import flash.net.URLRequestMethod;
14     import flash.utils.ByteArray;
15 
16     /**
17       * ...
18       * @author Frost.Yen
19       */
20     public class FlashSend extends Sprite
21     {
22         private var ldr:Loader = new Loader  ;
23         private var bmp:Bitmap;
24         private var scale:Number = 1;//对象缩放比例
25         public function FlashSend()
26         {
27             ldr.load(new URLRequest("11.jpg"));
28             //图片地址;
29             ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,onImageLoaded);
30         }
31 
32         private function onImageLoaded(e:Event):void
33         {
34             bmp = e.target.content as Bitmap;
35             /** 对象的缩放和visible不影响二进制数据的发送和图片的生成,但是如果对象存在遮罩和注册点不在左上角的情况会对图片的生成有影响**/
36             //bmp.scaleX = bmp.scaleY = scale;
37             //bmp.visible = false;
38             addChild(bmp);
39 
40             sendToPHP(creatBitmapData(bmp,bmp.width * scale,bmp.height * scale));
41         }
42         //向php发送数据;
43     };
44 
45     private function creatBitmapData(obj:DisplayObject,_width:Number,_height:Number):BitmapData
46     {
47         var bitmapdata:BitmapData = new BitmapData(_width,_height,false,0xffffff);
48         bitmapdata.draw(obj);
49         return bitmapdata;
50     }
51     private function sendToPHP(bitmapdata:BitmapData):void
52     {
53 
54         var jpgEncoder:JPGEncoder = new JPGEncoder(80);
55         var jpgStream:ByteArray = jpgEncoder.encode(bitmapdata);
56         var jpgURLRequest:URLRequest = new URLRequest("http://localhost:8181/FlashSendToPHPToSaveJPG/toSaveJPG.php");//php地址
57         jpgURLRequest.data = jpgStream;
58         jpgURLRequest.method = URLRequestMethod.POST;
59         jpgURLRequest.contentType = "application/octet-stream";
60         var jpg_loader:URLLoader = new URLLoader  ;
61         jpg_loader.dataFormat = URLLoaderDataFormat.BINARY;
62         jpg_loader.load(jpgURLRequest);
63     }
64 
65 }
66 
67 }

php端:

 1 <?php
 2 //$filename = $_GET[jpgname].".jpg";//要生成的图片名字    可在as代码里面的php地址后面加上?jpgname=image即可
 3 $filename="image.jpg";//要生成的图片名字
 4 $xmlstr = $GLOBALS[HTTP_RAW_POST_DATA];
 5 echo $xmlstr;
 6 if(empty($xmlstr)) $xmlstr = file_get_contents('php://input'); 
 7 $jpg = $xmlstr;//得到post过来的二进制原始数据
 8 $file = fopen($filename,"w");//打开文件准备写入
 9 fwrite($file,$jpg);//写入
10 fclose($file);//关闭
11 ?>

 

在此提供两个下载JPGEncoder.as和BitString.as类的地址:

http://download.csdn.net/source/3205224

http://code.google.com/p/as3corelib/ 使用其中的:com.adobe.images.JPEGEncoder

 

posted on 2015-06-01 15:51  晏过留痕  阅读(542)  评论(0编辑  收藏  举报