使用flash摄像头拍照的简单实践

打开Flash CS3,新建一个Flash文件(Script 2.0)。命名为pagea.fla

第一步:      在库中建立一个视频元件,类型选择:视频(受 ActionScript 控制)。      按F11打开库面板,右键空白地方出现一个弹出菜单,选择“新建视频”,随便起个名字。

第二步:       将视频元件拖到场景中,并调整尺寸到想要的大小。并起名为“camera”。同时在该图层放置两个Button,分别命名为“btnCamera”和“btnUpload”。

第三步:      新建一个图层,命名为“代码层”    点击时间轴第一帧,按F9打开代码面板,粘贴如下代码:

 

//view plaincopy to clipboardprint?
//camera是在场景中一个Video实例
//注意如果要想获取自己想要拍照大小,先做一个你想要大小的FLV文件,然后video选Embedded
camera.clear();
//摄像头控制对象
var cam:Camera = Camera.get();
if ( cam   == null){
   //code here if client no camera installed
}
//init variable
photow = new Number(100);
photoh = new Number(120);
cam.setMode(photow, photoh, 10, true);
camera.attachVideo(cam); //绑定摄像头视频流到video
//该对象用于实现发送数据到网页可get或post
var lv:LoadVars;
lv = new LoadVars();
//当按下拍照按纽
btnCamera.onRelease = function ()
{
    //获取当前视频画片
     saveCamera();
   //...
};
//toolbar.btnCameraRe.onRelease = function(){
  //   ...
    //saveCamera();
//}
function saveCamera(){
    //新建一个bitmapdate对象并获取video上的图像信息
    lv.bm = new flash.display.BitmapData(photow, photoh,true, 0); 
    lv.bm.draw(camera);
    //photoPreview是在场景中的一个Movie clip实例,用于输出bitmapdate实现照片预缆  
    var tempObj = _root.createEmptyMovieClip("photo", 100);
 tempObj._x = 63.0;
 tempObj._y = 53.0;
    tempObj._width = 100;
 tempObj._height = 120;
    tempObj.attachBitmap(lv.bm, 1); 
 camera.attachVideo(null);
}       
btnCell.onRelease = function (){       
    _root.photo._visible = false;
 camera.attachVideo(cam);
   //...
};
//上传照片到服务器
btnUpload.onRelease = function(){
    //读取图片矩形范围的像素信息,并以字符串的形式连接起来 begin
     i = lv.bm.height;
     j = lv.bm.width;
     rgb_array = "";
    for (y = i - 1; y >= 0; y--)
     {
        for (x = 0; x < j; x++)
         {
             color = lv.bm.getPixel(x, y).toString(16);
             rgb_array = rgb_array + (color + ",");
         } // end of for
     } // end of for
     lv.height = i;
     lv.width = j;
     lv.rgb_array = rgb_array;
    //读取图片矩形范围的像素信息,并以字符串的形式连接起来 end
    //发送到要处理的页面URL,可以在页面通过Request.Form["名称"]获取值,如:Request.Form["rgb_array"]
     lv.sendAndLoad("pageb.jsp", lv, "POST");
    //当页面返回信息即页面处理完成后,触发的行为
    /*
 lv.onLoad = function (success)
     {
         if (success)
         {
             //跳转到其他页面
             getURL("pagea.jsp", "_self");
         }
     };*/
}  

第四步:     按F12把flash导出成为html,你可以得到pagea.fla,pagea.html, pagea.swf和AC_RunActiveContent.js。 把pagea.html重命名为pagea.jsp,放置到你的jsp服务器目录下

第五步:    新建一个文件叫做pageb.jsp。粘贴如下代码

 

  1. <%@page import="java.io.*,java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*,javax.imageio.stream.*"%><%   
  2.   
  3. String width = request.getParameter("width");   
  4.   
  5. String height = request.getParameter("height");   
  6.   
  7. int w = Integer.parseInt(width);   
  8.   
  9.   int h = Integer.parseInt(height);   
  10.   
  11. try {   
  12.  
  13.    //OutputStream fos = response.getOutputStream();   
  14.   
  15.     OutputStream fos = new FileOutputStream(new File("c:\\a.jpg"));   
  16.   
  17.     BufferedImage bf = new BufferedImage(w, h,   
  18.   
  19.       BufferedImage.TYPE_INT_RGB);   
  20.   
  21.      String data = request.getParameter("rgb_array");   
  22.   
  23.      String[] ds = data.split(",");   
  24.   
  25.     int leng=ds.length-1;   
  26.   
  27.    for (int i = bf.getHeight()-1; i>=0 ; i--) {     
  28.   
  29.     for (int j = 0; j < bf.getWidth(); j++) {   
  30.   
  31.      int d = Integer.parseInt(ds[leng-(i*w+(bf.getWidth()-j-1))], 16);   
  32.   
  33.      //System.out.print(d);   
  34.   
  35.       bf.setRGB(j, i, d);   
  36.   
  37.      }   
  38.   
  39.     }   
  40.     ImageWriter writer = null;   
  41.   
  42.     ImageTypeSpecifier type = ImageTypeSpecifier.createFromRenderedImage(bf);   
  43.   
  44.     Iterator iter = ImageIO.getImageWriters(type, "jpg");   
  45.   
  46.    if (iter.hasNext()) {   
  47.   
  48.      writer = (ImageWriter) iter.next();   
  49.   
  50.     }   
  51.   
  52.    if (writer == null) {   
  53.   
  54.     return ;   
  55.   
  56.     }   
  57.   
  58.     IIOImage iioImage = new IIOImage(bf, null, null);   
  59.     ImageWriteParam param = writer.getDefaultWriteParam();   
  60.   
  61.     param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);   
  62.   
  63.     param.setCompressionQuality(0.2f);   
  64.    
  65.    // save to file   
  66.   
  67.    //ImageOutputStream outputStream2 = ImageIO.createImageOutputStream(response.getOutputStream());   
  68.   
  69.     ImageOutputStream outputStream2 = ImageIO.createImageOutputStream(fos);   
  70.   
  71.     writer.setOutput(outputStream2);   
  72.   
  73.     writer.write(null, iioImage, param);   
  74.  
  75.     fos.close();   
  76.  
  77.    } catch (Exception e) {   
  78.   
  79.     e.printStackTrace();   
  80.   
  81.    }   
  82.   
  83. System.out.println("w = " + w + ",h=" + h);   
  84.   
  85. response.setContentType("image/jpeg");   
  86.   
  87. return ;   
  88. %>  

 

你可能感兴趣的:(Flash)