使用Flex4开启用户的摄像头,并且拍照保存

来源:互联网 发布:mac迅雷怎么下电影 编辑:程序博客网 时间:2024/05/22 11:41
<?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"               xmlns:s="library://ns.adobe.com/flex/spark"               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)" height="658">    <s:layout>        <s:BasicLayout/>    </s:layout>    <fx:Script>        <![CDATA[            import flash.net.navigateToURL;                         import mx.events.FlexEvent;            import mx.graphics.codec.JPEGEncoder;                         private var cam:Camera;             protected function application1_creationCompleteHandler(event:FlexEvent):void            {                cam = Camera.getCamera();                var video:Video = new Video();                video.attachCamera(cam);                 vd.addChild(video);            }              protected function button1_clickHandler(event:MouseEvent):void            {                var bitmapData:BitmapData = new BitmapData(vd.width,vd.height);                bitmapData.draw(vd);                                 var jpeg:JPEGEncoder = new JPEGEncoder(100);                var byteArray:ByteArray = jpeg.encode(bitmapData);                              img.source = byteArray;            }        ]]>    </fx:Script>    <fx:Declarations>        <!-- 将非可视元素(例如服务、值对象)放在此处 -->    </fx:Declarations>    <s:VideoDisplay id="vd" x="128" y="6" width="385" height="300"/>    <s:Button x="33" y="111" label="保存" click="button1_clickHandler(event)"/>    <mx:Image id="img" x="127" y="320" width="385" height="300"/></s:Application>

首先开启用户的摄像头,在VideoDisplay组件中显示,然后把VideoDisplay中的图像保存为BitmapData,最后转换为ByteArray类型的数据显示在Image组件中

Flex4开启用户摄像头的代码跟Flex3稍有差别,Flex3可以通过vd.attachCamera(cam);开启摄像头 

 

2.改进这个例子,把拍照的图片保存在服务器中,或者提示用户下载

Flex4代码:

<?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"               xmlns:s="library://ns.adobe.com/flex/spark"               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)" height="658">    <s:layout>        <s:BasicLayout/>    </s:layout>    <fx:Script>        <![CDATA[            import flash.net.navigateToURL;                         import mx.events.FlexEvent;            import mx.graphics.codec.JPEGEncoder;                         private var cam:Camera;             protected function application1_creationCompleteHandler(event:FlexEvent):void            {                cam = Camera.getCamera();                var video:Video = new Video();                video.attachCamera(cam);                 vd.addChild(video);            }              protected function button1_clickHandler(event:MouseEvent):void            {                var bitmapData:BitmapData = new BitmapData(vd.width,vd.height);                bitmapData.draw(vd);                                 var jpeg:JPEGEncoder = new JPEGEncoder(100);                var byteArray:ByteArray = jpeg.encode(bitmapData);                                 var urlrequest:URLRequest = new URLRequest("http://localhost:8080/demo/FlexTest1.action");                urlrequest.contentType = 'applicatoin/octet-stream';                urlrequest.method = URLRequestMethod.POST;                urlrequest.data = byteArray;                navigateToURL(urlrequest);                                 img.source = byteArray;            }        ]]>    </fx:Script>    <fx:Declarations>        <!-- 将非可视元素(例如服务、值对象)放在此处 -->    </fx:Declarations>    <s:VideoDisplay id="vd" x="128" y="6" width="385" height="300"/>    <s:Button x="33" y="111" label="保存" click="button1_clickHandler(event)"/>    <mx:Image id="img" x="127" y="320" width="385" height="300"/></s:Application>

Java代码(struts2框架):

package com.ruiri.setup.web.action; import java.awt.image.BufferedImage;import java.io.File;import java.io.InputStream; import javax.imageio.ImageIO;import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class FlexTest1Action extends ActionSupport {         private InputStream inputStream;    private String contentType;    private String filename;         @Override    public String execute() throws Exception {        filename = "pic.jpg";        contentType = "application/octet-stream";        HttpServletRequest request =  ServletActionContext.getRequest();        inputStream = request.getInputStream();                 // 保存图片        BufferedImage bufferedImage = ImageIO.read(request.getInputStream());        ImageIO.write(bufferedImage, "jpeg", new File("d:\\pic.jpg"));                 return "file";    }     public InputStream getInputStream() {        return inputStream;    }     public void setInputStream(InputStream inputStream) {        this.inputStream = inputStream;    }     public String getContentType() {        return contentType;    }     public void setContentType(String contentType) {        this.contentType = contentType;    }     public String getFilename() {        return filename;    }}

Java中配置文件struts.xml:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>    <package name="default" namespace="/" extends="struts-default">        <global-results>                      <result name="file" type="stream">                <param name="contentType">                    ${contentType}                </param>                <param name="inputName">inputStream</param>                <param name="contentDisposition">                    attachment;filename="${filename}"                </param>                <param name="bufferSize">1024</param>            </result>        </global-results>             </package></struts>

Flex中ByteArray数据传到Java中,真是颇费周折,网上查了很多方法,自己也尝试多种方法,说的最多的是在Java中通过byte[]可以获取到,我没有试成功。

最后通过urlrequest.data = byteArray;直接把byteArray传递过去,在java里面通过request.getInputStream();得到数据

不过保存的图片还有些瑕疵,图片会多出来一片空白,不过总算是保存成功了,先庆祝一下吧,以后再慢慢研究:)


0 0
原创粉丝点击