FLASH 调用摄像头 JS中方法触发拍照,并将照片保存到本地文件夹

来源:互联网 发布:sql的exists 编辑:程序博客网 时间:2024/06/14 20:58

使用 FLASH CS4 开发

有些方法和实现过程是在网上趴的,经过自己的修改,为自己所用。

建一个文件,不用添加任何控件,直接F9 输入如下代码:

import com.adobe.images.JPGEncoder;
import com.adobe.images.PNGEncoder; 


var vid:Video; 
var cam:Camera = Camera.getCamera(); 
cam.setMode(400,450,15) // 设置相机在长,宽,侦


// 显示文本信息
var tf:TextField = new TextField(); 
tf.x = 480; // 文本显示在起始位置
tf.autoSize = TextFieldAutoSize.LEFT; 
addChild(tf); 


if (cam != null) { 
cam.addEventListener(StatusEvent.STATUS, statusHandler); 
vid = new Video(400,450); 
vid.attachCamera(cam);
// 旋转270度 (因为我的设备上摄像头向左转了90度,所以需要下边在方法)
centerRotate(vid, 270);



function statusHandler(event:StatusEvent):void { 
    if (!cam.muted)  { 
        vid.width = cam.width; 
        vid.height = cam.height;
        addChild(vid); 
    } 
    cam.removeEventListener(StatusEvent.STATUS, statusHandler); 









        
/* 一个测试方法,可以用JS调用的 */
ExternalInterface.addCallback("testAS",testFunc);
function testFunc(txt:String):String{
    tf.appendText("2222:::"+txt+"\n"); 
    ExternalInterface.call("saveBrushCardInfo","");
    return "SUCCESS";
}

// 获得照片信息(该方法被JS调用)
ExternalInterface.addCallback("getImageAS",getImage);
function getImage(url:String):void{
    // 拍照获得照片byte数组
    var bitmapData:BitmapData = new BitmapData(vid.height, vid.width-55, false, 0xFFCC00);
    bitmapData.draw(vid);
    var bytes:ByteArray = PNGEncoder.encode(bitmapData);

    // 将照片byte发送请求到后台处理
    var req:URLRequest = new URLRequest(url);
    req.data = bytes;
    req.method = URLRequestMethod.POST;
    req.contentType = "application/octet-stream";

    var loader:URLLoader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.BINARY; 
    loader.load(req);
//tf.appendText("3333333333333:::"+"\n");
    loader.addEventListener(Event.COMPLETE, completeHandler);

}

// 回调函数, 调用JS方法 saveBrushCardInfo
function completeHandler(evt:Event):void {
    // ExternalInterface.call("asCallJS","I,m AS!");
    ExternalInterface.call("saveBrushCardInfo","");
    //    trace(evt.target.data);
}

/** 
 * 绕中心点旋转 
 * @param   mc  元件 
 * @param   angle   角度  360  280
 */  
function centerRotate(mc:DisplayObject,angle:Number):void{  
//获取mc不旋转时候的尺寸  
var currentRotation:Number = mc.rotation;  
//tf.appendText("currentRotation:::"+currentRotation+"\n"); 
mc.rotation = 0;  
var mcWidth:Number = mc.width;  
var mcHeight:Number = mc.height;  
//mc.rotation = currentRotation;  

//获取mc当前中心点坐标  
var pointO:Point = mc.localToGlobal(new Point(mcWidth / 2, mcHeight / 2));  
//tf.appendText("pointO:::"+pointO.x +" --- "+pointO.y +"\n"); 
//旋转mc  
mc.rotation = angle;  

//获取mc旋转后中心点坐标  
var pointO2:Point = mc.localToGlobal(new Point( mcWidth/ 2, mcHeight / 2));
//tf.appendText("pointO2:::"+pointO2.x +" --- "+pointO2.y +"\n"); 

//平移到原来中心点O  
var p3:Point = pointO.subtract(pointO2);  // 减去
//tf.appendText("p3:::"+p3.x +" --- "+p3.y +"\n"); 
var matrix:Matrix = mc.transform.matrix;  
matrix.translate(p3.x, 400);

mc.transform.matrix = matrix;  
 
}

// 向左旋转90
function scaleLeft(bmp:BitmapData):BitmapData{ 
var m:Matrix = new Matrix(); 
m.rotate(-Math.PI/2); 
m.translate(0,bmp.width); 
var bd:BitmapData = new BitmapData(bmp.height, bmp.width,false); 
bd.draw(bmp,m); 
return bd; 
}


未完,稍后待续……

0 0