`
ry.china
  • 浏览: 137147 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

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

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

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

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

 

//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(160);    

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 = 300;

 tempObj._y = 40;

    tempObj.attachBitmap(lv.bm, 1);        

}    

   

//上传照片到服务器    

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 ;





%>

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

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

 

参考资料:

http://www.aspstat.com/69

http://www.blueidea.com/tech/multimedia/2005/3116.asp

http://www.d8space.com/member/diaryview.do?members(userid)=2&members(id)=49

分享到:
评论
1 楼 老梦a 2012-08-09  
要是保存到数据库,是怎么做呢,数据流这块,不太懂。。(*^__^*)

相关推荐

Global site tag (gtag.js) - Google Analytics