web富客户端

[转]使用flash摄像头拍照的简单实践  2010-12-06 15:45:32|  分类: 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。粘贴如下代码




<%@page import="java.io.*,java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*,javax.imageio.stream.*"%><%   
  
String width = request.getParameter("width");   
  
String height = request.getParameter("height");   
  
int w = Integer.parseInt(width);   
  
  int h = Integer.parseInt(height);   
  
try {   
 
   //OutputStream fos = response.getOutputStream();   
  
    OutputStream fos = new FileOutputStream(new File("c:\\a.jpg"));   
  
    BufferedImage bf = new BufferedImage(w, h,   
  
      BufferedImage.TYPE_INT_RGB);   
  
     String data = request.getParameter("rgb_array");   
  
     String[] ds = data.split(",");   
  
    int leng=ds.length-1;   
  
   for (int i = bf.getHeight()-1; i>=0 ; i--) {     
  
    for (int j = 0; j < bf.getWidth(); j++) {   
  
     int d = Integer.parseInt(ds[leng-(i*w+(bf.getWidth()-j-1))], 16);   
  
     //System.out.print(d);   
  
      bf.setRGB(j, i, d);   
  
     }   
  
    }   
    ImageWriter writer = null;   
  
    ImageTypeSpecifier type = ImageTypeSpecifier.createFromRenderedImage(bf);   
  
    Iterator iter = ImageIO.getImageWriters(type, "jpg");   
  
   if (iter.hasNext()) {   
  
     writer = (ImageWriter) iter.next();   
  
    }   
  
   if (writer == null) {   
  
    return ;   
  
    }   
  
    IIOImage iioImage = new IIOImage(bf, null, null);   
    ImageWriteParam param = writer.getDefaultWriteParam();   
  
    param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);   
  
    param.setCompressionQuality(0.2f);   
   
   // save to file   
  
   //ImageOutputStream outputStream2 = ImageIO.createImageOutputStream(response.getOutputStream());   
  
    ImageOutputStream outputStream2 = ImageIO.createImageOutputStream(fos);   
  
    writer.setOutput(outputStream2);   
  
    writer.write(null, iioImage, param);   
 
    fos.close();   
 
   } catch (Exception e) {   
  
    e.printStackTrace();   
  
   }   
  
System.out.println("w = " + w + ",h=" + h);   
  
response.setContentType("image/jpeg");   
  
return ;   
%>

你可能感兴趣的:(Flex,flsh)