2011-05-24 42 views
1

我需要一些幫助,從服務器中加載PNG文件到我的Flash項目中。我想要做的就是能夠調用一個PHP頁面併發送一個我可以做的變量。然後我想訪問一個數據庫並獲取圖像的路徑,我也可以這樣做。我不確定的是當時該怎麼做。 我需要發生的是PHP以某種方式返回PNG閃存。我可以將PNG添加到php頁面並以某種方式使用加載器嗎?我一直在谷歌搜索,但大多數教程似乎獲得PNGs。AS3從PHP加載PNG

感謝 本

+0

我想標記所有的答案是正確的。我將返回文件名,然後在最後使用flash來加載帶有文件名的serverurl。謝謝您的幫助。 – 2011-05-24 13:44:20

回答

4

它實際上是很容易的。 :)

<?php 
    // do some mysql magic. 
    // let's assume you get a filename back as $file_name; 

    header('Content-type: image/png'); 
    readfile($file_name); 

請注意,您可能還必須包含一些路徑信息。不知道你的圖像存儲在哪裏,但是如果圖像在/ var/www/public/images中,你會很喜歡將它加入到你的file_get_contents調用中。


補充:另外,如果你只是想一個路徑返回PNG,你可以做一個URLRequest到PHP文件,讓它找出圖像的居住地,並返回一個URL。這更簡單了...我只是推薦標準化爲像XML這樣的數據交換協議或者甚至更好的JSON ......這樣,如果您決定要跳出Flash和瀏覽器技術,那麼您的後端將已經在等着你。

<?php 
    // do some mysql magic. 
    // let's assume you get a filename back as $file_name; 

    $retVal = array('pathname'=>$file_name); 
    header('Content-type: application/json'); 
    echo json_encode($retVal); 
+3

正確的方法是'header('Content-type:image/png'); readfile($ file_name);' – 2011-05-24 11:21:23

+0

哎呀內容類型。過去我曾遇到過讀取文件的問題,但我確實忘記了確切的情況。所以是的,兩方都同意。 – 2011-05-24 11:25:13

+0

'readfile'將文件內部分塊發送到響應流,其中'file_get_contents'將文件讀入內存,然後通過緩衝區發送出去,使用'readfile'將保持內存使用率降低。 – RobertPitt 2011-05-24 11:41:36

2

如果你只要將網址返回到flash就足夠了。

import flash.display.*; 
import flash.net.URLRequest; 
var rect:Shape = new Shape(); 
rect.graphics.beginFill(0xFFFFFF); 
rect.graphics.drawRect(0, 0, 100, 100); 
rect.graphics.endFill(); 
addChild(rect); 
var ldr:Loader = new Loader(); 
ldr.mask = rect; 
var url:String = ""; //put the returned img url you got from the php here. 
var urlReq:URLRequest = new URLRequest(url); 
ldr.load(urlReq); //the loader will start loading the img 
addChild(ldr); //here you add the loader to stage. 

也許只有一兩毫米,你什麼都看不到。但是隻要加載器加載了img,你就會看到它。

您必須輸入返回的img網址。因此,不是返回img網址的網頁的網址。


如果你把上面的約翰·格林的答案 - PageSpike你可以只要PHP頁面是一個在約翰·格林的使用我的代碼 - PageSpike他的答案,你將返回的,而不是img然後將參數傳遞給php頁面;

var url:String = "http://www.yoursite.com/getImage.php?imgParameter=image123"; 

因此,該網址現在鏈接到約翰綠色 - PageSpike腳本的鏈接,它將實際返回圖像。

+0

他可能不想這樣做,以防止他的私人圖像目錄被嗅探。 – RobertPitt 2011-05-24 11:23:50

+0

「我想要做的就是調用一個PHP頁面併發送一個我可以做的變量。」這意味着只要頁面被曝光,每個人都可以獲得圖像。因爲我可以在瀏覽器中調用頁面並傳遞get圖像。或者我可以編寫一個簡單的腳本來使用POST var調用頁面。所以這沒關係。 – SynerCoder 2011-05-24 11:36:39

+0

@RobertPitt,@SynerCoder - 對於上下文,我認爲他實際上是根據我給他的一些以前的建議:http://stackoverflow.com/questions/6087598/as3-bitmap-storage/6087853#6087853。 – 2011-05-24 11:48:50

1

由於JHON格林已經提到的,它會工作

http://www.yourserver.com/filesforflash/?file_id={id} 
header('Content-type: image/png'); 
readfile($file_name);

,但你可能需要一些時間也需要即使您發送的內容類型圖像/ PNG的頭上面的網址將無法正常工作。快速提示對於即將發送的文件名本身,而不是自己的ID

http://www.yourserver.com/filesforflash/{id}-filename.png

爲此,您可能需要使用國防部重寫。