加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex在线拍照功能(附源码)

发布时间:2020-12-15 05:01:55 所属栏目:百科 来源:网络整理
导读:Flex代码: ? xml?version="1.0"?encoding="utf-8" ? mx:Application? xmlns:mx ="http://www.adobe.com/2006/mxml" ?layout ="absolute" ?width ="388" ?height ="222" ?creationComplete ="initApp()" ?backgroundColor ="#A6C9E2" ????? mx:Style ???????

Flex代码:

<? xml?version="1.0"?encoding="utf-8" ?>
< mx:Application? xmlns:mx ="http://www.adobe.com/2006/mxml" ?layout ="absolute" ?width ="388" ?height ="222" ?creationComplete ="initApp()" ?backgroundColor ="#A6C9E2" >
?????
< mx:Style >
?????????Alert{font-size:12px;}
?????
</ mx:Style >
?????
< mx:Script >
?????????
<![CDATA[
?????????????import?mx.events.CloseEvent;
?????????????import?mx.rpc.events.FaultEvent;
?????????????import?mx.rpc.events.ResultEvent;
?????????????import?mx.controls.Alert;
?????????????import?mx.core.Application;
????????????
?????????????private?static?const?DEFAULT_CAMERA_WIDTH:Number?=?160;?//摄像头显示宽度
?????????????private?static?const?DEFAULT_CAMERA_HEIGHT:Number?=?120;?//摄像头显示高度
?????????????private?var?DEFAULT_WEBSERVICE_URL:String?=?"";?//WebService地址
?????????????private?var?str:String;
????????????
?????????????private?var?m_camera:Camera;?//定义一个摄像头
?????????????private?var?m_localVideo:Video;?//定义一个本地视频
?????????????private?var?m_pictureBitmapData:BitmapData?//定义视频截图
?????????????[Bindable]
?????????????private?var?m_pictureData:String;
????????????
?????????????private?function?initApp():void
?????????????{
?????????????????t_btn_Shooting.enabled?=?false;
?????????????????t_ban_Save.enabled?=?false;
?????????????????initCamera();
?????????????????DEFAULT_WEBSERVICE_URL?=?Application.application.parameters.contextPath+"/onLineTakePhotoServlet";
?????????????????t_ws_SavePicture.url=DEFAULT_WEBSERVICE_URL;
?????????????}
????????????
?????????????//初始化摄像头
?????????????private?function?initCamera():void
?????????????{
?????????????????m_camera?=?Camera.getCamera();
?????????????????if(m_camera?!=?null)
?????????????????{
?????????????????????m_camera.addEventListener(StatusEvent.STATUS,__onCameraStatusHandler);
????????????????????
?????????????????????m_camera.setMode(DEFAULT_CAMERA_WIDTH,DEFAULT_CAMERA_HEIGHT,30);
?????????????????????m_localVideo?=?new?Video();
?????????????????????m_localVideo.width?=?DEFAULT_CAMERA_WIDTH;
?????????????????????m_localVideo.height?=?DEFAULT_CAMERA_HEIGHT;
?????????????????????m_localVideo.attachCamera(m_camera);
?????????????????????t_vd_Video.addChild(m_localVideo);
?????????????????}
?????????????????else
?????????????????{
?????????????????????Alert.show("没有找到摄像头,是否重新查找。","提示:",Alert.OK|Alert.NO,this,__InitCamera);
?????????????????????return;
?????????????????}
?????????????}
????????????
?????????????//拍照按钮事件,进行视频截图
?????????????private?function?SnapshotPicture():void
?????????????{
?????????????????m_pictureBitmapData?=?new?BitmapData(DEFAULT_CAMERA_WIDTH,DEFAULT_CAMERA_HEIGHT);
?????????????????m_pictureBitmapData.draw(t_vd_Video,new?Matrix());
????????????????
?????????????????var?m_pictureBitmap:Bitmap?=?new?Bitmap(m_pictureBitmapData);
?????????????????t_img_Picture.addChild(m_pictureBitmap);
????????????????
?????????????????t_panel_Picture.visible?=?true;
?????????????????t_ban_Save.enabled?=?true;
?????????????}
????????????
?????????????//保存按钮事件,保存视频截图
?????????????//通过WebService保存
?????????????private?function?SavePicture():void
?????????????{
?????????????????m_pictureData?=?"";
?????????????????for(var?i:int?=?0;?i?<?DEFAULT_CAMERA_WIDTH;?i++)
?????????????????{
?????????????????????for(var?j:int?=?0;?j?<?DEFAULT_CAMERA_HEIGHT;?j++)
?????????????????????{
?????????????????????????if(m_pictureData.length?>?0)
?????????????????????????{
?????????????????????????????m_pictureData?+=?","?+?m_pictureBitmapData.getPixel32(i,j).toString();
?????????????????????????}
?????????????????????????else
?????????????????????????{
?????????????????????????????m_pictureData?=?m_pictureBitmapData.getPixel32(i,j).toString();
?????????????????????????}
?????????????????????}
?????????????????}
?????????????????
?????????????????var?params:URLVariables?=?new?URLVariables();
?????params.width?=?DEFAULT_CAMERA_WIDTH;
?????params.height?=?DEFAULT_CAMERA_HEIGHT;
?????params.bitmap_data?=?m_pictureData;
?????t_ws_SavePicture.send(params);
?????????????}
????????????
?????????????//检测摄像头权限事件
?????????????private?function?__onCameraStatusHandler(event:StatusEvent):void
?????????????{
?????????????????if(!m_camera.muted)
?????????????????{
?????????????????????t_btn_Shooting.enabled?=?true;
?????????????????}
?????????????????else
?????????????????{
?????????????????????Alert.show("无法链接到活动摄像头,是否重新检测。",__InitCamera);
?????????????????}
?????????????????m_camera.removeEventListener(StatusEvent.STATUS,__onCameraStatusHandler);
?????????????}
????????????
?????????????//当摄像头不存在,或连接不正常时重新获取
?????????????private?function?__InitCamera(event:CloseEvent):void
?????????????{
?????????????????if(event.detail?==?Alert.OK)
?????????????????{
?????????????????????initApp();
?????????????????}
?????????????}
????????????
?????????????//WebService保存图片成功事件
?????????????private?function?__onSavePictureResult(event:ResultEvent):void
?????????????{
?????????????????//trace(event.result);
?????????????????if(event.result.toString()?!=?"保存失败")
?????????????????{
???????????????????str?=?event.result.toString();
???????????????????
?????????????????????Alert.show("保存成功,是否关闭窗口?","提示",3,__onAlertCloseHandler);
?????????????????}
?????????????????else
?????????????????{
?????????????????????Alert.show(event.result.toString(),Alert.OK);
?????????????????}
?????????????}
????????????
?????????????//连接WebService失败事件
?????????????private?function?__onSavePictureFault(event:FaultEvent):void
?????????????{
?????????????????//Alert.show(event.fault.toString(),Alert.OK);
?????????????????Alert.show("连接服务器失败。",Alert.OK);
?????????????}
????????????
?????????????//保存图片成功后的弹出窗口确认事件
?????????????private?function?__onAlertCloseHandler(event:CloseEvent):void
?????????????{
?????????????????if(event.detail?==?Alert.YES)
?????????????????{
????????????????????ExternalInterface.call("setValueToField",str);
?????????????????}
?????????????}
?????????
]]>
?????
</ mx:Script >
?????
< mx:HTTPService? id ="t_ws_SavePicture" ?showBusyCursor ="true" ?method ="POST" ?useProxy ="false" ?result ="__onSavePictureResult(event)" ?fault ="__onSavePictureFault(event)" />
?????
< mx:Panel? x ="10" ?y ="10" ?width ="180" ?height ="200" ?layout ="absolute" ?title ="视频拍照" ?fontSize ="12" >
?????????
< mx:VideoDisplay? id ="t_vd_Video" ?width ="160" ?height ="120" />
?????????
< mx:ControlBar? horizontalAlign ="right" >
?????????????
< mx:Button? id ="t_btn_Shooting" ?label ="拍照" ?click ="SnapshotPicture()" />
?????????
</ mx:ControlBar >
?????
</ mx:Panel >
?????
< mx:Panel? id ="t_panel_Picture" ?x ="198" ?y ="10" ?width ="180" ?height ="200" ?layout ="absolute" ?title ="拍照图片" ?fontSize ="12" ?visible ="false" >
?????????
< mx:Image? id ="t_img_Picture" ?x ="0" ?y ="0" ?width ="160" ?height ="120" />
?????????
< mx:ControlBar??? horizontalAlign ="right" >
?????????????
< mx:Button? id ="t_ban_Save" ?label ="保存" ?click ="SavePicture()" ? />
?????????
</ mx:ControlBar >
?????
</ mx:Panel >

</mx:Application>



java代码:


package ?cn.myapps.core.onlinetakephoto;

import ?java.awt.Color;
import ?java.awt.image.BufferedImage;
import ?java.io.ByteArrayOutputStream;
import ?java.io.DataOutputStream;
import ?java.io.File;
import ?java.io.FileOutputStream;
import ?java.io.IOException;

import ?javax.imageio.ImageIO;
import ?javax.servlet.ServletException;
import ?javax.servlet.http.HttpServlet;
import ?javax.servlet.http.HttpServletRequest;
import ?javax.servlet.http.HttpServletResponse;

import ?cn.myapps.constans.Environment;
import ?cn.myapps.util.sequence.Sequence;

/**
?*?Servlet?implementation?class?onLineTakePhotoServlet
?
*/
public ? class ?onLineTakePhotoServlet? extends ?HttpServlet?{
?
private ? static ? final ? long ?serialVersionUID? = ? 1L ;
????
?
private ?Environment?env? = ?Environment.getInstance();
?
?
public ? void ?doGet(HttpServletRequest?request,?HttpServletResponse?response)????
?
throws ?ServletException,?IOException?{????
?processRequest(request,?response);????
?}????
???
?
public ? void ?doPost(HttpServletRequest?request,?HttpServletResponse?response)????
??
throws ?ServletException,?response);????
?}????
?
?
public ? void ?processRequest(HttpServletRequest?request,?HttpServletResponse?response)

????
throws ?ServletException,?IOException?{
??response.setContentType(
" text/html;charset=UTF-8 " );???
????????response.setHeader(
" Pragma " ,? " No-cache " );???
????????response.setHeader(
" Cache-Control " ,? " no-cache " );???
????????response.setDateHeader(
" Expires " ,? 0 );???
??
????????String?bitmap_data?
= ?request.getParameter( " bitmap_data " );???
????????
int ?width? = ?Integer.parseInt(request.getParameter( " width " ));???
????????
int ?height? = ?Integer.parseInt(request.getParameter( " height " ));???
????????BufferedImage?img?
= ? new ?BufferedImage(width,?height,BufferedImage.TYPE_INT_RGB);???
??
try ?{???
????????????
int ?w? = ?width;???
????????????
int ?h? = ?height;???
????????????
int []?pixels? = ? new ? int [w? * ?h];???
????????????String[]?m_tempPics?
= ?bitmap_data.split( " , " );???
????????????
for ?( int ?x? = ? 0 ;?x? < ?w;?x ++ )?{???
????????????????
for ?( int ?y? = ? 0 ;?y? < ?h;?y ++ )?{???
????????????????????Long?pic_argb?
= ?Long.parseLong(m_tempPics[x? * ?h? + ?y]);???
????????????????????
int ?a? = ?( int )?(pic_argb? >> ? 24 ? & ? 0xFF );???
????????????????????
int ?r? = ?( int )?(pic_argb? >> ? 16 ? & ? 0xFF );???
????????????????????
int ?g? = ?( int )?(pic_argb? >> ? 8 ? & ? 0xFF );???
????????????????????
int ?b? = ?( int )?(pic_argb? & ? 0xFF );???
????????????????????pixels[y?
* ?w? + ?x]? = ? new ?Color(r,?g,?b,?a).getRGB();???
????????????????}???
????????????}???
????????????img.setRGB(
0 ,? 0 ,?w,?h,?pixels,?w);???
????????????img.flush();???
????????????ByteArrayOutputStream?bao?
= ? new ?ByteArrayOutputStream();???
????????????ImageIO.write(img,?
" jpg " ,?bao);???
????????????
byte []?data? = ?bao.toByteArray();??
????????????String?filePath?
= ?env.getRealPath( " /uploads/photo " );
????????????
// 判断路径是否存在,若不存在则创建路径
????????????File?upDir? = ? new ?File(filePath);
????????????
if ?( ! upDir.exists())
????????????{
????????????????upDir.mkdir();
????????????}
????????????
// 生成随机文件名
????????????String?saveName? = ?Sequence.getSequence();
????????????String?fileName?
= ?saveName? + ? " .jpg " ;
????????????
// 写图片
????????????File?f? = ? new ?File(filePath + " " ? + ?fileName);
??????DataOutputStream?dos?
= ? new ?DataOutputStream( new ?FileOutputStream(f));
??????dos.write(data);
??????dos.flush();
??????dos.close();
??????response.setContentType(
" text/xml " );???
????????????response.getWriter().write(
" /uploads/photo/ " ? + ?fileName);???
????????}
????????
catch (Exception?ex)
????????{
?????????response.setContentType(
" text/xml " );???
????????????response.getWriter().write(
" 保存失败 " );??? ????????} ?} }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读