应用场景:很多网站都有设置自己头像的功能,分为从本地上传图片和摄像头拍照功能。本篇主要讲解利用摄像头拍照保存头像,以后我还会讲解剪裁图像的功能实现。
几个知识点的大概了解。
flash.media.Camera 对象可以连接到用户的本地摄像头并在本地广播视频(播放给用户),播放视频用flash.media.Video对象。
flash.display.BitmapData对象可以处理位图图像的数据。draw方法可以获得当前Video的图像数据。
as3corelib中的com.adobe.images.JPGEncoder对象的
encode(image:BitmapData):ByteArray
方法可以将BitmapData对象转化为JPG图像。得到ByteArray后我们可以将数据传到服务器上或者保存到客户端。
flash.net.FileReference对象可以保存jpg图片到本地。
下面是一个大概的代码:
package
{
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.media.Camera;
import flash.media.Video;
import flash.net.FileReference;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.utils.ByteArray;
import com.adobe.images.JPGEncoder;
public class Test extends Sprite
{
public function Test()
{
init();
}
private var video:Video;//视频对象
private var tf:TextField;//点击开始拍照
public function init():void
{
if(Camera.names.length>0){
var cam:Camera = Camera.getCamera();
cam.setMode(400,300,10);//摄像头的宽度和高度
cam.setQuality(0,100);//图像质量
video=new Video(400,300);
video.x=0;
video.y=0;
video.attachCamera(cam);
addChild(video);
}else{
trace("用户没有可用摄像头");
return ;
}
tf= new TextField();
tf.x = 150;
tf.y=310;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.text="点击我开始拍照";
addChild(tf);
tf.addEventListener(MouseEvent.CLICK, savePic);
}
public function savePic(event:MouseEvent):void
{
var imageSource:BitmapData= new BitmapData(400,300);
var matrix:Matrix=new Matrix();
matrix.scale(1,1);//方法比例 由video和camera的宽高决定
imageSource.draw(video,matrix);
var file:FileReference= new FileReference();
var jpegEncoder:JPGEncoder= new JPGEncoder(100);
var imageDataArray:ByteArray=jpegEncoder.encode(imageSource);
file.save(imageDataArray,"我的靓照.jpg");
video.attachCamera(null);//关闭摄像头
tf.removeEventListener(MouseEvent.CLICK,savePic);
}
}
}