2014-01-09 76 views
1

我需要將截圖從Flash保存到本地驅動器。由於受到一些限制,我很遺憾無法使用FileReference,因爲它會產生一個對話框(以任何方式直接保存在本地?)或FileStream(AdobeAir),因爲我僅限於SWF。AS3通過PHP保存圖像

所以我決定嘗試使用PHP來完成工作。

AS3

private function takePhoto():void { 
    var bitmapData:BitmapData = new BitmapData(800, 650); 
    var encoder:JPGEncoder = new JPGEncoder(100); 
    var byteArray:ByteArray; 
    var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream"); 

    bitmapData.draw(camHolder); 
    byteArray = encoder.encode(bitmapData); 
    var myRequest:URLRequest = new URLRequest("save.php"); 
    myRequest.requestHeaders.push(header); 
    myRequest.method = URLRequestMethod.POST; 
    myRequest.data = byteArray; 
    loader.addEventListener(Event.COMPLETE, imgSaved); 
    loader.load(myRequest); 
} 

private function imgSaved(event:Event):void { 
    trace(loader.data); 
} 

PHP

<?php 
if(isset($GLOBALS["HTTP_RAW_POST_DATA"])){ 
    $jpg = $GLOBALS["HTTP_RAW_POST_DATA"]; 
    $filename = "test.jpg"; 
    file_put_contents($filename, $jpg); 
} 
?> 

大約從我的AS3跟蹤奇怪的imgSaved功能是,它正好返回字爲我的PHP代碼字。在這個過程中也沒有保存圖像。任何幫助,將不勝感激!

回答

0

實現這一點有一個棘手的方法。

您需要在SWF中提供下載鏈接(一個href HTML鏈接),供用戶單擊並開始下載圖像。

按照以下步驟,看看它是否有助於:

  1. 使用method1method2

  2. Create an anchor tag as shown below

    <a href="data:application/octet-stream;base64,xxxxx" download="filename.jpg">Download</a>

    其中將圖像轉換的ByteArray爲Base64圖像' xxxxx'是圖像的Base64編碼字符串。

  3. 現在,當用戶點擊此鏈接時,圖像應立即下載到用戶指定的「下載」文件夾中。

聲明:

  1. 將該溶液從另一溶液here啓發。

  2. 據我所知,這可能只適用於當您的應用程序在瀏覽器中打開,而不是作爲獨立或AIR應用程序打開時。

  3. 我還沒有嘗試過自己,所以沒有保證解決方案的有效性。

+0

謝謝!讓我試試這個。 – user1234567

+0

嗨srvikram13,如果屏幕截圖是在flash內部拍攝的,並使用jpgencoder進行編碼的,我會如何將其上傳到網絡服務器上? – user1234567

+0

早就回來了,我做了一個類似的應用程序。我現在沒有這個代碼。但是,您可以嘗試使用[** this **](http://www.beautifycode.com/webcam-flash-php-upload-to-server)教程中給出的PHP代碼將圖像保存到Web服務器上。 –