⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mincamup.as

📁 用摄像头在线拍照片,上传到服务器,也可以自己画一个图片上传到服务器
💻 AS
字号:
package{
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.StatusEvent;
	import flash.events.IOErrorEvent;
	import flash.events.TextEvent

	import flash.display.Sprite;
	import flash.display.Bitmap;
	import flash.display.BitmapData;

	import flash.media.Video;
	import flash.media.Camera;
	
	import fl.controls.Button;
	import fl.controls.TextArea;
	import fl.controls.ColorPicker;
	
	import flash.text.TextFormat;
	
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLRequestMethod;
	import flash.net.URLVariables;
	import flash.net.navigateToURL;
	import flash.net.SharedObject;
	
	import com.klstudio.images.JPGEncoder;
	
	import flash.utils.ByteArray;
	
	public class MinCamUp extends Sprite{
		
		private var video:Video;
		private var cam:Camera;
		private var canUse:Boolean=false;
		private var drw:Sprite;
		private var photo:Sprite;
		private var shot_btn:Button;
		private var up_btn:Button;
		private var brs_btn:Button;
		private var tft:TextFormat
		private var showLog:TextArea;
		private var fileName:String;
		private var color:uint=0x000000;
		private static const UPLOAD_PAGE:String="test.asp";
		
		public function MinCamUp(){

			//右边的照片
			photo=new Sprite();
			addChild(photo);
			photo.x=260;
			photo.y=10;
			photo.graphics.lineStyle(1,0xefefef);
			photo.graphics.drawRect(0,0,239,179);
			
			//设置按钮字号大小,原始的太难看了
			tft=new TextFormat();
			tft.size=12;
			
			//抓拍按纽
			shot_btn=new Button();
			shot_btn.label="抓拍图片";
			addChild(shot_btn);
			shot_btn.x=10,shot_btn.y=200;
			shot_btn.setStyle("textFormat",tft);
			shot_btn.addEventListener(MouseEvent.CLICK,shotPhoto);
			
			//上传按钮
			up_btn=new Button();
			up_btn.label="上传图片";
			addChild(up_btn);
			up_btn.x=260,up_btn.y=200;
			up_btn.setStyle("textFormat",tft);
			up_btn.setStyle("disabledTextFormat",tft);
			up_btn.enabled=false;
			
			//显示状态
			showLog=new TextArea();
			addChild(showLog);
			showLog.setStyle("textFormat",tft);
			showLog.setSize(490,60);
			showLog.x=10,showLog.y=232;
			
			//视频
			cam=Camera.getCamera();
			if(cam){
				cam.addEventListener(StatusEvent.STATUS,statusHandler);
				cam.setKeyFrameInterval(15);
				cam.setMode(240,180,24,false);
				cam.setQuality(0,100);
				
				video=new Video(240,180);
				addChild(video);
				video.x=10,video.y=10;				
				video.attachCamera(cam);
				
				canUse=true;
			}else{
				writeLog("您没有摄像头,那就自己画吧!");
				setPaint();
			}
			
			//在浏览器中浏览
			brs_btn=new Button();
			brs_btn.label="在浏览器中浏览";
			addChild(brs_btn);
			brs_btn.x=10,brs_btn.y=302;
			brs_btn.setStyle("textFormat",tft);
			brs_btn.addEventListener(MouseEvent.CLICK,openFile);
			
		}
	
		//抓个图片
		private function shotPhoto(event:MouseEvent):void{
			var bmd:BitmapData=new BitmapData(240,180);;
			if(canUse){
				bmd.draw(video);
			}else{
				bmd.draw(drw);
			}
			photo.graphics.lineStyle(1,0x000000);
			photo.graphics.beginBitmapFill(bmd);
			photo.graphics.drawRect(0,0,239,179);
			photo.graphics.endFill();
			
			up_btn.addEventListener(MouseEvent.CLICK,upPhoto);
			up_btn.enabled=true;
			writeLog("抓个照片...");
		}
		
		//上传图片
		private function upPhoto(event:MouseEvent):void{
			up_btn.enabled=false;
			
			var encoder:JPGEncoder = new JPGEncoder(80);
			var bytes:ByteArray = encoder.encode(getBitmapData());
			var request:URLRequest = new URLRequest(UPLOAD_PAGE);
			//data值就为图片编码数据ByteArray;
			request.data = bytes;
			request.method = URLRequestMethod.POST;
			//这个是关键,内容类型必须是下面文件流形式;
			request.contentType = "application/octet-stream";
			
			var loader:URLLoader = new URLLoader();			
			loader.addEventListener(Event.COMPLETE, completeHandler);
			loader.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);
			loader.load(request);
			writeLog("开始上传...");
		}
		
		//上穿完毕的处理
		private function completeHandler(event:Event):void{
			try{
				var urlvar:URLVariables=new URLVariables(event.target.data);
				if(urlvar.success=="OK"){
					writeLog("上传完毕!");
					up_btn.enabled=true;
					fileName=urlvar.filename;
					writeLog("文件名:"+fileName);
				}else{
					writeLog("发生未知错误!");
				}
			}catch(er:Error){
				writeLog("发生错误:" + er.toString());
			}
		}
		
		//在浏览器中打开当前上传的文件
		private function openFile(event:MouseEvent):void{
			if(fileName==null){
				writeLog("你还没有上传图片呢...");
			}else{
				navigateToURL(new URLRequest("photo/" + fileName),"_blank");
			}
		}
		
		//出错时的处理
		private function errorHandler(event:IOErrorEvent):void{
			writeLog("出现错误:"+ event.toString());
		}
		
		//得到照片的bmd
		private function getBitmapData():BitmapData{
			var bmd:BitmapData = new BitmapData(photo.width,photo.height);
			bmd.draw(photo);
			return bmd;
		}
		
		//显示状态
		private function writeLog(str:String):void{
			showLog.appendText(str + "\n");
			//trace(showLog.textField.maxScrollV);
			showLog.textField.scrollV=showLog.textField.maxScrollV;
		}
		
		//用户是否拒绝接受使用摄像头
		private function statusHandler(event:StatusEvent):void{
			if(event.code=="Camera.Muted"){
				canUse=false;
				setPaint();
				writeLog("您拒绝打开摄像头,那就自己画吧,哈哈!");
			}
		}
		
		//如果用户拒绝使用视频或没有视频就画图
		private function setPaint():void{
			drw=new Sprite();
			addChild(drw);
			drw.x=10;
			drw.y=10;
			drw.graphics.lineStyle(1,0x000000);
			drw.graphics.drawRect(0,0,239,179);
			
			//画图
			stage.addEventListener(MouseEvent.MOUSE_DOWN,onMsDown);
			stage.addEventListener(MouseEvent.MOUSE_UP,onMsUp);			
			
			//清除按钮
			var clr_btn:Button=new Button();
			addChild(clr_btn);
			clr_btn.label="清除重画";
			clr_btn.x=117,clr_btn.y=200;
			clr_btn.setStyle("textFormat",tft);
			clr_btn.addEventListener(MouseEvent.CLICK,clrDraw);
			
			//选色器
			var cpker:ColorPicker=new ColorPicker();
			addChild(cpker);
			cpker.x=222,cpker.y=200;
			cpker.addEventListener(Event.CHANGE,function(event:Event):void{color=cpker.selectedColor;});
		}
		
		//画
		private function onMsDown(event:MouseEvent):void{
			drw.graphics.lineStyle(1,color);
			drw.graphics.moveTo(mouseX-10,mouseY-10);
			stage.addEventListener(MouseEvent.MOUSE_MOVE,onMsMove);
		}
		private function onMsUp(event:MouseEvent):void{
			stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMsMove);
		}
		private function onMsMove(event:MouseEvent):void{
			if(mouseX-10<=240 && mouseY-10<=180 && mouseX>=10 && mouseY>=10){
				drw.graphics.lineTo(mouseX-10,mouseY-10);
			}
		}
		
		//清除重画
		private function clrDraw(event:MouseEvent):void{
			writeLog("清除重画...");
			drw.graphics.clear();
			drw.graphics.lineStyle(1,0x000000);
			drw.graphics.drawRect(0,0,239,179);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -