.2008/12/10 新增範例下載
今天試著用Flash CS3寫一個Flash Webcam 線上拍照存檔的範例~
大致上分成兩部份來處理~一部份為Flash的前端,用來截取Webcam的畫面並將它存進BitmapData中,以供透過URLRequest來上傳處理~
而這部份比較關鍵的是,我們利用「as3corelib」所提供的「JPGEncoder」來進行壓縮,以增進傳送速度~
想當然而,後端就是直接將它讀出並存進一個影像檔即可。
程式碼如下所示:
ActionScript 3
import com.adobe.images.JPGEncoder;
var camera:Camera = Camera.getCamera("0");
camera.setMode(320,240,30);
var video = new Video(320, 240);
video.attachCamera(camera);
stage.addChild(video);
stage.addEventListener(MouseEvent.MOUSE_DOWN,clickHandler);
function clickHandler(event:MouseEvent)
{
var bd:BitmapData = new BitmapData(320, 240);
bd.draw(video);
var encoder:JPGEncoder = new JPGEncoder(100);
var bytes:ByteArray = encoder.encode(bd);
var req:URLRequest = new URLRequest("http://localhost/WebCamHandler.as3");
req.data = bytes;
req.method = URLRequestMethod.POST;
req.contentType = "application/octet-stream";
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, completeHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
loader.load(req);
}
function completeHandler(event:Event):void
{
trace("上傳成功");
}
function errorHandler(event:IOErrorEvent):void
{
trace("上傳失敗");
}
Servlet
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WebCamHandler extends HttpServlet
{
private String base;
public void init(ServletConfig sc) throws ServletException
{
ServletContext sco = sc.getServletContext();
base = sco.getRealPath("/");
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
int readed;
try
{
String filePath = base+new Date().getTime()+".jpg";
BufferedInputStream bis = new BufferedInputStream(req.getInputStream());
FileOutputStream fos = new FileOutputStream(new File(filePath));
byte[] bytes = new byte[2048];
while((readed=bis.read(bytes)) != -1)
{
fos.write(bytes, 0, readed);
}
fos.close();
bis.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
範例下載
.WebCamHandler(CS4、Webapp)