📄 mincamup.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 + -