blog.Ring.idv.tw

Flash Webcam 線上拍照存檔!~

Flash Webcam 線上拍照存檔!~


.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)

2007-08-19 15:19:20

17 comments on "Flash Webcam 線上拍照存檔!~"

  1. 1. awei 說:

    請問這些code要怎麼用?

    2008-05-28 10:39:54

  2. 2. Shen 說:

    呃~ 基本上AS程式你copy到Flash CS3的Action Panel就行了~
    至於後端我是用Java的方式處理~ 如果你需要其它語言的解決方案~ 那就需要改寫一下~

    2008-05-28 18:18:07

  3. 3. 邦邦 說:

    互相交流


    Flash WebCam 拍照存檔
    http://benbenstudio.blogspot.com/2007/08/flash-webcam.html

    將影片轉成連續圖檔
    http://benbenstudio.blogspot.com/2007/09/blog-post_05.html

    我的 Google App Engine 第一個範例:Webcam 監控程式
    http://benbenstudio.blogspot.com/2008/06/google-app-engine-webcam.html

    2008-06-19 15:18:34

  4. 4. Shen 說:

    感謝您的分享~ ^^b
    不過Google App Engine那篇的原始檔連結已經失效了~ 可以修補一下嗎?
    剛不小心發現~ 我的某位學弟曾去你的Blog上留言~ 呵~ XD

    2008-06-19 15:48:44

  5. 5. 宗諺 說:

    網路真是好恐怖的東西呀(半浮出水面)

    2008-06-19 15:50:31

  6. 6. sosandsos 說:

    請問「as3corelib」抓下來的壓縮檔要怎麼擺?
    現在把程式放進去跑時  "1172: 找不到定義 com.adobe.images:JPGEncoder。"

    後端的部分  直接把java的部分直接抓下來用JAVA跑就可以嗎?

    2008-11-23 18:01:37

  7. 7. Alan 說:

    請問前輩,如果我只是單單按一個按鈕就照相,不存檔的話,大概要改哪些地方呢?
    小弟剛接觸FLASH,還請前輩多多指教~ 謝謝了^^"

    2008-12-10 01:14:16

  8. 8. Shen 說:

    呃.. 不存檔?
    若只是純粹要取得照相後的影像而不存檔~
    寫到...
    var bd:BitmapData = new BitmapData(320, 240);
    bd.draw(video);
    這兩行即可~ 剩下的就看你怎麼玩BitmapData了~
    good luck!


    2008-12-10 16:33:40

  9. 9. Randall 說:

    你好板主,我也想請教一下

    首先, 我對FLASH 是零認識, 而我想做Flash WebCam 拍照存檔的application, 用家只需在網頁按一下, 就可以用WEBCAM 拍照並儲存在伺服器下的指定位置

    現在, 我把範例放了在TOMCAT, 瀏覽 http://...../cam/FlashWebcam.swf 是可以看到Flash WebCam, 那接着要怎樣修改?

    是否只修改new URLRequest("http://localhost/WebCamHandler.as3")? 拍下的檔案放了在那裏?

    謝謝賜教

    2010-02-28 16:04:27

  10. 10. Shen 說:

    理論上不需要修改程式碼即可運作,並在web應用程式的目錄下發現jpg圖檔,如果沒有的話請檢查一下log檔。

    2010-03-01 19:02:39

  11. 11. kit 說:

    請問前輩,如果我只是按一個按鈕就照相,存檔在C:的話,大概要改哪些地方呢?
    請前輩多多指教~ 謝謝了

    2010-09-14 01:21:09

  12. 12. Shen 說:

    純粹修改檔案要儲存位置的話,就改filePath即可

    2010-09-14 08:43:45

  13. 13. kit 說:

    請問前輩 ,我對FLASH script 是零認識,照相存檔在C:的話,那一句是filePath,是否只修改new URLRequest("http://localhost/WebCamHandler.as3")? 改變做("c://images")? 請教一下

    2010-09-14 15:29:15

  14. 14. Shen 說:

    Hi kit, 我建議你先找本Flash AS入門的書籍來看,這樣你比較方便抓到重點!

    2010-09-14 15:34:24

  15. 15. kit 說:

    前輩, 我已有Flash AS入門的書籍,still cant find ,請教是那一句filePath, 謝謝,只教一句可以嗎? 多多指教 謝謝 謝謝 只教一句,謝謝 

    2010-09-15 01:13:58

  16. 16. Shen 說:

    寫檔案是交由後端程式去寫,Flash只是將捕捉到的Bitmap資訊送給後端。

    2010-09-15 08:56:55

  17. 17. mike 說:

    想請問一下,爬文過後發現
    1.後端程式是更改附檔名即可設定儲存的位址?
    i.e: String filePath = "C:\"+new Date().getTime()+".jpg";!?
    2.該servlet & flash 是否須另外寫一個html將他包起來!?

    2011-04-15 17:21:49

Leave a Comment

Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: Ads :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment