flash 上传类 带自动压缩功能
发布时间:2020-12-15 17:31:26 所属栏目:百科 来源:网络整理
导读:现在相片比较大,好几M,直接上传比较麻烦 package {import com.adobe.images.JPGEncoder;import com.adobe.images.PNGEncoder;import flash.display.Bitmap;import flash.display.BitmapData;import flash.display.DisplayObject;import flash.display.Dis
现在相片比较大,好几M,直接上传比较麻烦 package { import com.adobe.images.JPGEncoder; import com.adobe.images.PNGEncoder; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.DisplayObjectContainer; import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.MouseEvent; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.net.FileFilter; import flash.net.FileReference; import flash.utils.ByteArray; import flash.display.MovieClip; import fl.controls.Button; import flash.text.TextFormat; import flash.text.TextFieldAutoSize; import fl.controls.Label; import flash.external.ExternalInterface; import flash.net.FileFilter; import flash.net.FileReference; import flash.net.FileReferenceList; import flash.events.*; import flash.net.navigateToURL; import flash.net.URLRequest; import flash.net.URLVariables; import flash.events.Event; import flash.net.URLLoader; import flash.net.*; public class upload extends MovieClip { private var fileUpload:FileReferenceList = new FileReferenceList(); private var serverUrl:String = 'upload.php'; private var imgWidth:Number = 980; private var imgHeight:Number = 650; private var imgQuality:Number = 80; private var imgtype:Number = 0; private var jsFunction:String = ''; private var sessionid:String = ''; private var uploadid:String = ''; private var upfile:Array=new Array(); private var btnname:String = "选择上传图片"; private var infobar:Label = new Label(); public function upload() { // constructor code trace("hello word!"); var parameters:Object= root.loaderInfo.parameters; if(parameters != null) { if(parameters["serverUrl"] != null) { serverUrl = String(parameters["serverUrl"]); } if(parameters["imgWidth"] != null) { imgWidth = Number(parameters["imgWidth"]); } if(parameters["imgHeight"] != null) { imgHeight = Number(parameters["imgHeight"]); } if(parameters["imgQuality"] != null) { imgQuality = Number(parameters["imgQuality"]); } if(parameters["jsFunction"] != null) { jsFunction = String(parameters["jsFunction"]); } if(parameters["uploadid"] != null) { uploadid = String(parameters["uploadid"]); } if(parameters["btnText"] != null) { btnname = String(parameters["btnText"]); } if(parameters["sessionid"] != null) { sessionid = String(parameters["sessionid"]); } if(parameters["imgtype"] != null) { imgtype = Number(parameters["imgtype"]); } } var myButton:Button = new Button(); myButton.label = btnname; myButton.width = 100; myButton.height = 30; myButton.move(10,10); var t1:TextFormat=new TextFormat(); t1.bold=true; t1.size=14; myButton.setStyle("textFormat",t1); this.addChild(myButton); infobar.width=200; infobar.height = 30; infobar.move(10,45); infobar.text="请选择图片,可以多选!"; this.addChild(infobar); //点击事件,选择图片 myButton.addEventListener(MouseEvent.CLICK,buttonClick); fileUpload.addEventListener(Event.SELECT,selectHandler); fileUpload.addEventListener(Event.COMPLETE,loadImageComplete); fileUpload.addEventListener(IOErrorEvent.IO_ERROR,function(evt:IOErrorEvent):void{ infobar.text="加载图片失败!错误信息:" + evt.text; }); fileUpload.addEventListener(SecurityErrorEvent.SECURITY_ERROR,function(evt:SecurityErrorEvent):void{ infobar.text="加载图片失败!错误信息:" + evt.text; }); } private function selectHandler(e:Event):void { //处理选择图片 infobar.text="选择了"+ e.target.fileList.length +"个图片。"; upfile=new Array(); var file:FileReference; for (var i:uint = 0; i < e.target.fileList.length; i++) { file = FileReference(e.target.fileList[i]); file.addEventListener(Event.COMPLETE,loadImageComplete); file.addEventListener(IOErrorEvent.IO_ERROR,function(evt:IOErrorEvent):void{ infobar.text="读入图片失败!错误信息:" + evt.text; }); file.addEventListener(SecurityErrorEvent.SECURITY_ERROR,function(evt:SecurityErrorEvent):void{ infobar.text="读入图片失败!错误信息:" + evt.text; }); //加载图片到内存 file.load(); //保存起来 upfile.push(file); } } private function loadImageComplete(evt:Event):void { trace('abb'+evt.target.name); //完成加载图片 infobar.text="读取完"+ evt.target.name +"图片,正在处理中。。。"; var objname:String=String(evt.target.name); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,function (event:Event):void { var loaderInfo:LoaderInfo = (event.target as LoaderInfo); var bitmap:Bitmap = Bitmap(loaderInfo.content); var _imageContainer = new Sprite(); _imageContainer.addChild(bitmap); //this.addChild(_imageContainer); var xsize:Number; var ysize:Number; var rsize:Number=1; var asize:Number; var bsize:Number; var nw:Boolean=false; var nh:Boolean=false; var imageData:BitmapData; var shiftOrigin:Matrix; trace("width:"+bitmap.width+"height:"+bitmap.height); if(imgtype==2){ //最大边对齐 if(bitmap.width > imgWidth || bitmap.height > imgHeight) { if(bitmap.width > bitmap.height){ asize=imgWidth / bitmap.width; nw=true; } if(bitmap.height > bitmap.width){ bsize=imgHeight / bitmap.height; nh=true; } if(nw && nh) { if(asize < bsize) { rsize = asize; }else{ rsize = bsize; } }else if(nw) { rsize = asize; }else if(nh) { rsize = bsize; } } ysize = Math.ceil(bitmap.height*rsize); xsize = Math.ceil(bitmap.width*rsize); asize=0; bsize=0; if(ysize>imgHeight){ bsize=Math.round((ysize-imgHeight)/2); ysize=imgHeight; } if(asize>imgWidth){ asize=Math.round((asize-imgWidth)/2); xsize =imgWidth; } imageData= new BitmapData(xsize,ysize); shiftOrigin= new Matrix(); shiftOrigin.scale(rsize,rsize); shiftOrigin.translate(-asize,-bsize); }else if(imgtype==1){ //缩放到固定大小 if(bitmap.width > imgWidth || bitmap.height > imgHeight) { if(bitmap.width > imgWidth){ asize=imgWidth / bitmap.width; nw=true; } if(bitmap.height > imgHeight){ bsize=imgHeight / bitmap.height; nh=true; } if(nw && nh) { if(asize < bsize) { rsize = bsize; }else{ rsize = asize; } }else if(nw) { rsize = asize; }else if(nh) { rsize = bsize; } } trace(rsize+":r"); asize=Math.round(((bitmap.width*rsize)-imgWidth)/2); bsize=Math.round(((bitmap.height*rsize)-imgHeight)/2); if(imgWidth>bitmap.width){ xsize = bitmap.width; asize=0; }else{ xsize = imgWidth; } if(imgHeight>bitmap.height){ ysize = bitmap.height; bsize=0; }else{ ysize = imgHeight; } imageData= new BitmapData(xsize,-bsize); }else{ //默认不大于 if(bitmap.width > imgWidth || bitmap.height > imgHeight) { if(bitmap.width > imgWidth){ asize=imgWidth / bitmap.width; nw=true; } if(bitmap.height > imgHeight){ bsize=imgHeight / bitmap.height; nh=true; } if(nw && nh) { if(asize < bsize) { rsize = asize; }else{ rsize = bsize; } }else if(nw) { rsize = asize; }else if(nh) { rsize = bsize; } } trace(rsize+":r"); ysize = Math.round(bitmap.height*rsize); xsize = Math.round(bitmap.width*rsize); imageData= new BitmapData(xsize,ysize); shiftOrigin= new Matrix(); shiftOrigin.scale(rsize,rsize); trace(xsize+" "+ysize); } imageData.draw(_imageContainer,shiftOrigin); var encodedImage:ByteArray; var jpgEncoder:JPGEncoder = new JPGEncoder(80); encodedImage = jpgEncoder.encode(imageData); //释放 imageData.dispose(); infobar.text="编码完成,正在上传"+ objname +"图片"; var req:URLRequest = new URLRequest(serverUrl+"?sessionid="+sessionid+"&filename="+encodeURIComponent(objname)); req.contentType = 'applicatoin/octet-stream'; req.method = URLRequestMethod.POST; /* var variables:URLVariables = new URLVariables(); variables.filename=encodeURIComponent(objname); variables.filedata=encodedImage; variables.width=imageData.width.toString(); variables.height=imageData.height.toString(); var arrHead:Array = new Array(); arrHead.push(new URLRequestHeader("fileName",encodeURIComponent(objname))); arrHead.push(new URLRequestHeader("width",imageData.width.toString())); arrHead.push(new URLRequestHeader("height",imageData.height.toString())); req.requestHeaders = arrHead; */ req.data = encodedImage; var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE,uploadComplete); loader.addEventListener(IOErrorEvent.IO_ERROR,function(evt:IOErrorEvent):void{ trace("上传图片失败!错误信息:" + evt.text); infobar.text="上传图片io错误:" + evt.text; }); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,function(evt:SecurityErrorEvent):void{ trace("上传图片失败!错误信息:" + evt.text); infobar.text="上传图片安全错误:" + evt.text; }); try { infobar.text="正在上传"+ objname +"图片"; loader.load(req); } catch (error:Error) { trace("上传失败!" + error.message); infobar.text="上传失败:" + error.message; } }); loader.loadBytes(evt.target.data); } private function showError(str:String):void { callJs('error',str); infobar.text=str; } private function uploadComplete(evt:Event):void{ callJs('complete',evt.target.data); infobar.text="上传完成:"+ evt.target.data; //调用输入框的id if(uploadid!= null) { callJs('uploadid',evt.target.data); } } private function callJs(type:String,str:String):void { if(jsFunction == '') { return; } try { if(ExternalInterface.available) { ExternalInterface.call(jsFunction,type,str); } } catch(err:Error) {} } private function buttonClick(e:MouseEvent) { var fileFilter:FileFilter = new FileFilter("图片","*.jpg;*.gif;*.jpeg;"); fileUpload.browse([fileFilter]); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |