.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(); } } }
範例下載
請問這些code要怎麼用?
2008-05-28 10:39:54
呃~ 基本上AS程式你copy到Flash CS3的Action Panel就行了~
至於後端我是用Java的方式處理~ 如果你需要其它語言的解決方案~ 那就需要改寫一下~
2008-05-28 18:18:07
互相交流
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
感謝您的分享~ ^^b
不過Google App Engine那篇的原始檔連結已經失效了~ 可以修補一下嗎?
剛不小心發現~ 我的某位學弟曾去你的Blog上留言~ 呵~ XD
2008-06-19 15:48:44
網路真是好恐怖的東西呀(半浮出水面)
2008-06-19 15:50:31
請問「as3corelib」抓下來的壓縮檔要怎麼擺?
現在把程式放進去跑時 "1172: 找不到定義 com.adobe.images:JPGEncoder。"
後端的部分 直接把java的部分直接抓下來用JAVA跑就可以嗎?
2008-11-23 18:01:37
請問前輩,如果我只是單單按一個按鈕就照相,不存檔的話,大概要改哪些地方呢?
小弟剛接觸FLASH,還請前輩多多指教~ 謝謝了^^"
2008-12-10 01:14:16
呃.. 不存檔?
若只是純粹要取得照相後的影像而不存檔~
寫到...
var bd:BitmapData = new BitmapData(320, 240);
bd.draw(video);
這兩行即可~ 剩下的就看你怎麼玩BitmapData了~
good luck!
2008-12-10 16:33:40
你好板主,我也想請教一下
首先, 我對FLASH 是零認識, 而我想做Flash WebCam 拍照存檔的application, 用家只需在網頁按一下, 就可以用WEBCAM 拍照並儲存在伺服器下的指定位置
現在, 我把範例放了在TOMCAT, 瀏覽 http://...../cam/FlashWebcam.swf 是可以看到Flash WebCam, 那接着要怎樣修改?
是否只修改new URLRequest("http://localhost/WebCamHandler.as3")? 拍下的檔案放了在那裏?
謝謝賜教
2010-02-28 16:04:27
理論上不需要修改程式碼即可運作,並在web應用程式的目錄下發現jpg圖檔,如果沒有的話請檢查一下log檔。
2010-03-01 19:02:39
請問前輩,如果我只是按一個按鈕就照相,存檔在C:的話,大概要改哪些地方呢?
請前輩多多指教~ 謝謝了
2010-09-14 01:21:09
純粹修改檔案要儲存位置的話,就改filePath即可
2010-09-14 08:43:45
請問前輩 ,我對FLASH script 是零認識,照相存檔在C:的話,那一句是filePath,是否只修改new URLRequest("http://localhost/WebCamHandler.as3")? 改變做("c://images")? 請教一下
2010-09-14 15:29:15
Hi kit, 我建議你先找本Flash AS入門的書籍來看,這樣你比較方便抓到重點!
2010-09-14 15:34:24
前輩, 我已有Flash AS入門的書籍,still cant find ,請教是那一句filePath, 謝謝,只教一句可以嗎? 多多指教 謝謝 謝謝 只教一句,謝謝
2010-09-15 01:13:58
寫檔案是交由後端程式去寫,Flash只是將捕捉到的Bitmap資訊送給後端。
2010-09-15 08:56:55
想請問一下,爬文過後發現
1.後端程式是更改附檔名即可設定儲存的位址?
i.e: String filePath = "C:\"+new Date().getTime()+".jpg";!?
2.該servlet & flash 是否須另外寫一個html將他包起來!?
2011-04-15 17:21:49