flex摄像头拍照 java上传到数据库时间:2021-03-14 13:30:41 前两天看了一个flex摄像头拍照的程序感觉不错不过是C# 代码的,有点遗憾,今天给他改成了java代码的。 <?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="750" height="600" creationComplete="initApp()"> <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; private static const DEFAULT_CAMERA_WIDTH:Number = 160; //摄像头显示宽度 private static const DEFAULT_CAMERA_HEIGHT:Number = 120; //摄像头显示高度 // private static const DEFAULT_WEBSERVICE_URL:String = "http://localhost:1888/Web/TestWebService.asmx?WSDL"; //WebService地址 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(); } //初始化摄像头 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();// }// }// }// // t_ws_SavePicture.SavePicture.send();// } //检测摄像头权限事件 private function __onCameraStatusHandler(event:StatusEvent):void { if(!m_camera.muted) { t_btn_Shooting.enabled = true; } else { Alert.show("无法链接到活动摄像头,是否重新检测。","提示:",Alert.OK|Alert.NO,this,__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() == "保存成功") { Alert.show(event.result.toString(),"提示",Alert.OK,this,__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("连接WebService失败。","提示",Alert.OK); } //保存图片成功后的弹出窗口确认事件 private function __onAlertCloseHandler(event:CloseEvent):void { if(event.detail == Alert.OK) { //trace("转向页面"); } } public function SavePicture(){ var params:URLVariables = new URLVariables(); 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(); } } }params.width = DEFAULT_CAMERA_WIDTH; params.height = DEFAULT_CAMERA_HEIGHT;params.bitmap_data = m_pictureData; savePictureService.url = "http://localhost:8088/archive/savepicturesrv";savePictureService.send(params); } ]]--> </mx:Script> <mx:HTTPService showBusyCursor="true" id="savePictureService" method="POST" resultFormat="xml" fault="__onSavePictureFault(event)" result="__onSavePictureResult(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 代码: 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 = commons.getRequestInt(request.getParameter("width"),0);int height = commons.getRequestInt(request.getParameter("height"),0);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); //右移16位 ,取后8位;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, 0, w);img.flush();ByteArrayOutputStream bao = new ByteArrayOutputStream();ImageIO.write(img, "jpg", bao);byte[] data = bao.toByteArray();Personimage user = new Personimage();user.setFileContent(data);PersonimageDAO hm = new PersonimageDAO();hm.save(user);PersonrelationDAO prm = new PersonrelationDAO();Personrelation pr = prm.findById(new Long(personRelationId));pr.setPersonimageid(user.getId());pr.setImageflag("1");prm.update(pr);str.append("保存成功");} catch (Exception e) {e.printStackTrace();str.append("保存失败");} response.setContentType("text/xml"); response.getWriter().write(str.toString());}