簡體   English   中英

將ActionScript JPG字節數組傳遞給Javascript(最終傳遞給PHP)

[英]Passing an ActionScript JPG Byte Array to Javascript (and eventually to PHP)

我們的Web應用程序具有一項功能,該功能使用Flash(AS3)通過用戶的網絡攝像頭拍照,然后將所得的字節數組傳遞給PHP,在此處將其重建並保存在服務器上。

但是,我們需要能夠使該Web應用程序脫機,並且我們選擇了Gears來實現。 用戶使應用程序脫機,執行任務,然后當他重新連接到服務器時,我們將數據“同步”回我們的中央數據庫。

我們不再需要PHP與Flash進行交互,但是我們仍然需要允許用戶拍攝和保存照片。 我們不知道如何將Flash創建的JPG保存在本地數據庫中。 我們的希望是,我們可以保存字節數組,序列化的字符串,或者以某種方式實際保留對象本身,然后將其傳遞回PHP或Flash(然后是PHP)以重新創建JPG。

我們已經嘗試過:-將字節數組傳遞給Javascript而不是PHP,但是javascript似乎無法對其進行任何操作(該對象似乎被剝奪了其方法)-在Flash中將字節數組字符串化,然后傳遞給Javascript,但我們總是得到相同的字符串:

ÿØÿà

現在,我們正在考慮在Flash中對字符串進行序列化,將其傳遞給Javascript,然后在返回路徑上,將該字符串傳遞回Flash,然后將其傳遞給PHP以重新構造為JPG。 (噢)。 由於我們團隊中沒有人具有廣泛的Flash背景,因此我們有些失落。

序列化是路要走嗎? 有沒有更現實的方法可以做到這一點? 有人對這種事情有經驗嗎? 也許我們可以構建一個與AS中的字節數組類相同的javascript類?

我不確定為什么要在這里使用Javascript。 無論如何,您粘貼的字符串看起來像是JPG標頭的開頭。 問題是JPG肯定會包含NUL(值為0的字符)。 這很可能會截斷字符串(就像您發布的示例一樣)。 如果要“字符串化” JPG,則標准方法是將其編碼為Base 64。

但是,如果要在本地保留數據,則可以在Flash中進行處理。 這很簡單,但是有一些限制。

您可以為此使用本地共享對象 默認情況下,限制為100 Kb,這對於圖像文件來說是遠遠不夠的。 不過,您可以要求用戶為您的應用分配更多空間。 無論如何,我都會嘗試將圖像存儲為JPG,而不是原始像素,因為大小上的差異非常明顯。

共享對象將透明地為您處理序列化/反序列化。 有一些警告:並非每個對象都可以真正序列化; 對於初學者,它必須具有無參數的構造函數; 諸如Sprites,MovieClips等的DisplayObject將無法正常工作。 但是,可以序列化ByteArray,因此您可以在本地保存JPG(如果用戶允許額外的空間)。 您應該使用AMF3作為編碼方案(我認為這是默認設置)。 同樣,您應該使用registerClassAlias映射要序列化的類,以保留序列化對象的類型(否則它將被視為Object對象)。 您只需要在應用程序生命周期中執行一次此操作,但是必須在對共享對象進行任何讀/寫操作之前執行此操作。

類似於以下內容:

registerClassAlias( “flash.utils.ByteArray的”,字節陣列);

我會使用共享對象而不是Javascript。 請記住,您很可能必須要求用戶給您更多的空間來存儲圖像(如果您允許它們脫機工作,這似乎是足夠合理的),並且用戶可以在任何時候刪除數據時間(就像他可以刪除其瀏覽器的Cookie一樣)。

編輯

我知道我對您提出的問題的“我們選擇了Gears”部分並沒有給予太多關注。

在這種情況下,您可以嘗試使用base 64方法將數據傳遞給JS。 從Actionscript方面來說,這很容易(從那里獲得許多可用的Base64編碼器/解碼器之一),並且我認為Gear的API必須已經有可用的編碼器/解碼器(或者至少應該不難找到一種編碼器/解碼器)。 到那時,您可能必須將其轉換為Blob並將其存儲到磁盤(也許使用BlobAPI ,但是我不確定,因為我沒有使用Gears的經驗)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM