as 拍照 上传



import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.graphics.codec.PNGEncoder;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;
import mx.utils.Base64Encoder;


private var cam:Camera;


protected function encode(byteArray:ByteArray):String{
var base64Encoding:Base64Encoder = new Base64Encoder();
base64Encoding.encodeBytes(byteArray , 0 , byteArray.length);
return base64Encoding.toString();
}

protected function application1_creationCompleteHandler(event:FlexEvent):void 
{
cam = Camera.getCamera("0");

cam.setMode(100 , 100 , 15 , false);

var video:Video = new Video();
video.attachCamera(cam);
video.width = 100;
video.height = 100;

Alert.show("cam.height" + cam.width + "--" + cam.height);

Alert.show("video.heigh" + video.width + "--" + video.height);

var camArray:Array = Camera.names;
trace(camArray);
vd.addChild(video);
}

protected function button1_clickHandler(event:MouseEvent):void
{

Alert.show("" + vd.width + "--" + vd.height);
var bitmapData:BitmapData = new BitmapData(vd.width , vd.height);

// var bitmapData:BitmapData = new BitmapData(50 , 50);


bitmapData.draw(vd);

var png:PNGEncoder = new PNGEncoder();
// mx.graphics.codec.PNGEncoder

// mx.graphics.codec.JPEGEncoder


var byteArray:ByteArray = png.encode(bitmapData);


var f:FileReference  = new FileReference();
f.save(byteArray);

// byteArray.endian = Endian.BIG_ENDIAN;
// byteArray.endian = Endian.LITTLE_ENDIAN;


var service:HTTPService = new HTTPService();
service.method = URLRequestMethod.POST;

service.contentType = "application/octet-stream";
service.headers["accept"] = "*/*";
service.headers["piclength"] = byteArray.length;

service.url = "http://127.0.0.1:8080/upload/upload";

// service.addEventListener( Event.DEACTIVATE , completeHandle4 );
// service.addEventListener( Event.ACTIVATE , completeHandle3 );
// service.addEventListener( InvokeEvent.INVOKE , completeHandle6 );
service.addEventListener( ResultEvent.RESULT ,  completeHandle);
// service.addEventListener( FaultEvent.FAULT , completeHandle5 );

// Alert.show(""+byteArray.length);

service.showBusyCursor = true;

service.send(byteArray);


}

private function completeHandle(e:ResultEvent):void{
trace(e.result)
// Alert.show("上传成功!");
}


package imgservlet;

import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

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

import net.coobird.thumbnailator.Thumbnails;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import sun.misc.BASE64Encoder;

import facepp.FaceUtil;

@WebServlet("/upload")
public class Upload extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
    public Upload() {
        super();
    }
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

    private byte[] input2byte(InputStream inStream)
    
            throws IOException {
    	
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();  
        byte[] buff = new byte[100];  
        int rc = 0;  
        while ((rc = inStream.read(buff, 0, 100)) > 0) {  
            swapStream.write(buff, 0, rc);  
        }  
        byte[] in2b = swapStream.toByteArray();  
        return in2b;  
    }  
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Long s = System.currentTimeMillis();
		
		InputStream is = request.getInputStream();
		BufferedImage bi = Thumbnails.of(is).scale(0.5).outputQuality(0.3).asBufferedImage();
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		
		ImageIO.write(bi, "png", baos);
		
//		BufferedInputStream bis = new BufferedInputStream(is);
//		Integer piclength = Integer.valueOf(request.getHeader("piclength"));
		
//		byte[] b = new byte[500];
		
//		int rc = 0;
//		ByteArrayOutputStream baos = new ByteArrayOutputStream();
//		while((rc = bis.read(b)) > 0){
//			baos.write(b, 0, rc);
//		}

		byte[] faceData = baos.toByteArray();
		JSONObject rs = FaceUtil.faceDetect(faceData);
		
		System.out.println(rs.toString());
		
		baos.flush();
		baos.close();
		
//        BASE64Encoder encoder = new BASE64Encoder();
//        return encoder.encode(data);//返回Base64编码过的字节数组字符串
		
		try {
			
			JSONArray faceArray = rs.getJSONArray("face");
			String img_id = rs.getString("img_id");
			
//	        
//	        return encoder.encode(data);//返回Base64编码过的字节数组字符串
			
			BASE64Encoder encoder = new BASE64Encoder();
			System.out.println(faceData.length);
			System.out.println(encoder.encode(faceData).getBytes().length);
			
			
			persistenceFace(faceData , img_id);
			
			
		} catch (JSONException e) {
			e.printStackTrace();
		}
		
		System.out.println(System.currentTimeMillis() - s);
	}
	
	
	private void persistenceFace(byte[] data , String img_id){
		
		File f = new File("C:/facePic/" + img_id + ".png");
		try {
			FileOutputStream fos = new FileOutputStream(f);
			fos.write(data);
			fos.flush();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现这个功能需要使用JavaScript调用浏览器的媒体设备API获取摄像头信息,然后将拍摄的照片上传到Django服务器。 以下是一个简单的实现过程: 1. 在HTML中创建一个video标签和一个button按钮,并为按钮添加点击事件,代码如下: ```html <!DOCTYPE html> <html> <head> <title>Camera</title> </head> <body> <video id="video" width="640" height="480" autoplay></video> <button id="snap">Snap Photo</button> <script src="{% static 'js/camera.js' %}"></script> </body> </html> ``` 2. 在JavaScript中获取摄像头信息,并将摄像头流渲染到video标签中,代码如下: ```javascript const video = document.getElementById('video'); const snapBtn = document.getElementById('snap'); // 获取摄像头信息 navigator.mediaDevices.getUserMedia({ video: true }) .then(stream => { video.srcObject = stream; video.play(); }) .catch(err => { console.log('Error: ' + err); }); // 拍照事件 snapBtn.addEventListener('click', () => { const canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; const ctx = canvas.getContext('2d'); ctx.drawImage(video, 0, 0, canvas.width, canvas.height); const imgData = canvas.toDataURL('image/png'); uploadPhoto(imgData); }); ``` 3. 编写上传照片的函数uploadPhoto,使用Fetch API将照片上传到Django服务器,并在服务器端保存照片文件,代码如下: ```javascript function uploadPhoto(imgData) { fetch('/upload_photo/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ 'imgData': imgData }) }) .then(response => { console.log('Photo uploaded successfully'); }) .catch(error => { console.error('Error:', error); }); } ``` 4. 在Django中编写处理上传照片的视图函数upload_photo,代码如下: ```python from django.http import JsonResponse def upload_photo(request): if request.method == 'POST': img_data = request.POST['imgData'] img_data = img_data.replace('data:image/png;base64,', '') img_data = base64.b64decode(img_data) # 保存照片文件 with open('photo.png', 'wb') as f: f.write(img_data) return JsonResponse({'message': 'Photo uploaded successfully'}) ``` 注意事项: 1. 上传照片需要使用HTTP POST方法,因此需要在Fetch API中将method设置为'POST'; 2. 在Fetch API中需要将请求头Content-Type设置为'application/json',并使用JSON.stringify将照片数据转换为JSON格式; 3. 在Django中获取POST请求数据时需要使用request.POST,而不是request.GET; 4. 在Django中保存照片文件时需要使用二进制方式打开文件并写入数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值