加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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]);
        }
	}
	
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读