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( " 保存失败 " );??? ????????} ?} } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |