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

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

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

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

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

 

Jscript代码   收藏代码
  1. //camera是在场景中一个Video实例      
  2.   
  3. //注意如果要想获取自己想要拍照大小,先做一个你想要大小的FLV文件,然后video选Embedded      
  4.   
  5. camera.clear();                      
  6.   
  7.      
  8.   
  9. //摄像头控制对象      
  10.   
  11. var cam:Camera = Camera.get();      
  12.   
  13. if ( cam  == null){      
  14.   
  15.    //code here if client no camera installed      
  16.   
  17. }      
  18.   
  19. //init variable      
  20.   
  21. photow = new Number(160);      
  22.   
  23. photoh = new Number(120);      
  24.   
  25.      
  26.   
  27. cam.setMode(photow, photoh, 10, true);      
  28.   
  29. camera.attachVideo(cam); //绑定摄像头视频流到video      
  30.   
  31.      
  32.   
  33. //该对象用于实现发送数据到网页可get或post      
  34.   
  35. var lv:LoadVars;      
  36.   
  37. lv = new LoadVars();      
  38.   
  39.      
  40.   
  41.      
  42.   
  43.      
  44.   
  45. //当按下拍照按纽      
  46.   
  47. btnCamera.onRelease = function ()      
  48.   
  49. {      
  50.   
  51.     //获取当前视频画片      
  52.   
  53.     saveCamera();      
  54.   
  55.    //...      
  56.   
  57. };      
  58.   
  59. //toolbar.btnCameraRe.onRelease = function(){        
  60.   
  61.   //  ...      
  62.   
  63.     //saveCamera();      
  64.   
  65. //}      
  66.   
  67. function saveCamera(){       
  68.   
  69.     //新建一个bitmapdate对象并获取video上的图像信息      
  70.   
  71.     lv.bm = new flash.display.BitmapData(photow, photoh,true, 0);         
  72.   
  73.     lv.bm.draw(camera);       
  74.   
  75.     //photoPreview是在场景中的一个Movie clip实例,用于输出bitmapdate实现照片预缆      
  76.   
  77.     var tempObj = _root.createEmptyMovieClip("photo", 100);  
  78.   
  79.  tempObj._x = 300;  
  80.   
  81.  tempObj._y = 40;  
  82.   
  83.     tempObj.attachBitmap(lv.bm, 1);          
  84.   
  85. }      
  86.   
  87.      
  88.   
  89. //上传照片到服务器      
  90.   
  91. btnUpload.onRelease = function(){      
  92.   
  93.          
  94.   
  95.     //读取图片矩形范围的像素信息,并以字符串的形式连接起来 begin      
  96.   
  97.     i = lv.bm.height;      
  98.   
  99.     j = lv.bm.width;      
  100.   
  101.     rgb_array = "";      
  102.   
  103.     for (y = i - 1; y >= 0; y--)      
  104.   
  105.     {      
  106.   
  107.         for (x = 0; x < j; x++)      
  108.   
  109.         {      
  110.   
  111.             color = lv.bm.getPixel(x, y).toString(16);      
  112.   
  113.             rgb_array = rgb_array + (color + ",");      
  114.   
  115.         } // end of for      
  116.   
  117.     } // end of for      
  118.   
  119.     lv.height = i;      
  120.   
  121.     lv.width = j;      
  122.   
  123.     lv.rgb_array = rgb_array;      
  124.   
  125.     //读取图片矩形范围的像素信息,并以字符串的形式连接起来 end      
  126.   
  127.         
  128.   
  129.     //发送到要处理的页面URL,可以在页面通过Request.Form["名称"]获取值,如:Request.Form["rgb_array"]      
  130.   
  131.     lv.sendAndLoad("pageb.jsp", lv, "POST");      
  132.   
  133.      
  134.   
  135.     //当页面返回信息即页面处理完成后,触发的行为       
  136.   
  137.     /* 
  138.  
  139.     lv.onLoad = function (success)     
  140.  
  141.     {     
  142.  
  143.         if (success)     
  144.  
  145.         {     
  146.  
  147.             //跳转到其他页面     
  148.  
  149.             getURL("pagea.jsp", "_self");     
  150.  
  151.         }     
  152.  
  153.     };*/      
  154.   
  155. }      

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

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

Java代码   收藏代码
  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.   
  22.   
  23.     String data = request.getParameter("rgb_array");  
  24.   
  25.     String[] ds = data.split(",");  
  26.   
  27.     int leng=ds.length-1;  
  28.   
  29.    for (int i = bf.getHeight()-1; i>=0 ; i--) {    
  30.   
  31.     for (int j = 0; j < bf.getWidth(); j++) {  
  32.   
  33.      int d = Integer.parseInt(ds[leng-(i*w+(bf.getWidth()-j-1))], 16);  
  34.   
  35.      //System.out.print(d);  
  36.   
  37.      bf.setRGB(j, i, d);  
  38.   
  39.     }  
  40.   
  41.    }  
  42.   
  43.   
  44.   
  45.    ImageWriter writer = null;  
  46.   
  47.    ImageTypeSpecifier type = ImageTypeSpecifier.createFromRenderedImage(bf);  
  48.   
  49.    Iterator iter = ImageIO.getImageWriters(type, "jpg");  
  50.   
  51.    if (iter.hasNext()) {  
  52.   
  53.     writer = (ImageWriter) iter.next();  
  54.   
  55.    }  
  56.   
  57.    if (writer == null) {  
  58.   
  59.     return ;  
  60.   
  61.    }  
  62.   
  63.    IIOImage iioImage = new IIOImage(bf, nullnull);  
  64.   
  65.    ImageWriteParam param = writer.getDefaultWriteParam();  
  66.   
  67.   
  68.   
  69.    param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);  
  70.   
  71.   
  72.   
  73.    param.setCompressionQuality(0.2f);  
  74.   
  75.   
  76.   
  77.    // save to file  
  78.   
  79.    //ImageOutputStream outputStream2 = ImageIO.createImageOutputStream(response.getOutputStream());  
  80.   
  81.    ImageOutputStream outputStream2 = ImageIO.createImageOutputStream(fos);  
  82.   
  83.    writer.setOutput(outputStream2);  
  84.   
  85.    writer.write(null, iioImage, param);  
  86.   
  87.   
  88.   
  89.    fos.close();  
  90.   
  91.   
  92.   
  93.   } catch (Exception e) {  
  94.   
  95.    e.printStackTrace();  
  96.   
  97.   }  
  98.   
  99. System.out.println("w = " + w + ",h=" + h);  
  100.   
  101.  response.setContentType("image/jpeg");  
  102.   
  103.  return ;  
  104.   
  105.   
  106.   
  107.   
  108.   
  109. %>  

此时你可以通过访问http://yourserver/pagea.jsp 来访问拍照页面,允许flash访问camera。等待画面出来之后,点击拍照和上传按钮,图片就会上传到服务器的c:\\a.jpg中。

本例仅给出简单参考,你可以根据实际需要设定图片保存的临时目录和文件名,并处理完成过后的提示信息。

你可能感兴趣的:(使用flash摄像头拍照的简单实践)