一、flash在线拍照并上传到后台(servlet)
第一步:先新建一个ActionScript文件:ShiBieFunction.as
该文件的核心代码如下:
=========使用摄像头获取视频流===========
//定义一个摄像头,他会搜索电脑是否存在摄像头,如果不存在则返回一个null
var cam:Camera = Camera.getCamera();
if(null == cam){
trace("====没有找到摄像头=====");
}else{
//然后调用其setModel()方法将摄像头捕获模式设置为指定要求的本机模式,
//参数说明如下:width/height说明捕获图片的宽高,cam_speed是捕获的帧频,true表示是否将捕获模式设置为最符合指定要求的本机模式
cam.setModel(width,height,cam_speed,true);
//摄像头若要实际开始捕获视频,必须将Camera对象附加到Video对象,因此需要一个Video对象
var video:Video = new Video(width,height);
//attacheCamera()指定将在舞台上的video对象的边界内显示视频流
video.attacheCamera(cam);
//将video对象添加到舞台
addChild(video);
}
=======获取视频流中某一数据=======
//构建数据对象(大数据对象)
var bitmapData:BitmapData = new BitmapData(video_width,video_height);
var bitmap:Bitmap = new Bitmap(bitmapData);
//通过以上代码可以获取摄像头在video中的图片的大小,如果想只获取其中的某一部分,还可以进一步定义一个矩形
var jieQuBitmapRec=new Rectangle(x,y,width,height);
//捕获图片
bitmapData.draw(video,null,null,jieQuBitmapRec,false);
=============将获取的图片信息转换成图片并上传到后台==========
// 配置 URLRequest, 设置目标路径, 设置提交的数据, 方法 (POST / GET)
var requestHeader:URLRequestHeader=new URLRequestHeader("Content-type","application/octet-stream");
var req:URLRequest=new URLRequest("http://192.168.1.109:8080/ccc/ReciveFlashDataServlet");
var loader:URLLoader = new URLLoader();
req.method=URLRequestMethod.POST;
req.requestHeaders.push(requestHeader);
loader.dataFormat=URLLoaderDataFormat.BINARY;//数据的传输使用二进制
这里使用JPGEncoder将摄像头捕获的图像数据转成图片jpg数据,将JPGEncode.as放置到与代码所在目录下
//
var jpegE:JPGEncoder=new JPGEncoder(100);
var imgData:ByteArray = jpegE.encoder(bitmapData);
//然后将图片二级制数组数据附着到请求上
req.data = imgData;
//发送请求
loader.load(req);
===============后台代码编写(一个简单的Servlet)==================
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
index++;
System.out
.println("ReciveFlashDataServlet data .... index : " + index);
File file = new File("c:\\tempJPG\\" + index + ".jpg");
BufferedInputStream inputStream = new BufferedInputStream(
req.getInputStream());
FileOutputStream outputStream = new FileOutputStream(file);
byte[] bytes = new byte[1024];
int v =0;
while ((v = inputStream.read(bytes)) > 0)
{
outputStream.write(bytes, 0, v);
}
outputStream.close();
inputStream.close();
}
源代码获取可以从我的下载频道获取:http://download.csdn.net/my