2011-08-01 56 views
1

所以我有一個iPhone應用程序,該上傳圖像到我的網絡服務器和我環顧四周,人們似乎在做類似從imagecreatefromstring PHP

$data = file_get_contents($_FILES['file']['tmp_name']); 
$image = imagecreatefromstring($data); 
header('Content-Type: image/png'); 
imagepng($image); 
imagedestroy($image); 

我看着PHP的文檔,但我仍然不明白header()的作用;它是否將圖像轉換爲我想要的任何格式?

而對於imagepng(),圖像輸出到哪裏呢?記憶?這就是爲什麼我需要imagedestroy()?

,並在那裏將我放在

move_uploaded_file() 

提前感謝!

回答

0

標題純粹是爲了服務器,讓瀏覽器知道「嘿,這是一個PNG圖像請使它如此」

imagepng編碼成PNG格式和「打印」到輸出

imagedestroy釋放圖像資源佔用的內存。

如果需要力拓,你可以使用mod_rewrite

下面是一個示例幾行從我.htaccess

RewriteEngine on 
RewriteRule images/000000/00FF00/newmyinfo.jpg images/newmyinfo.php?bgcolor=000000&color=00ff00 [L] 

希望這有助於!

+0

感謝您的回覆!這解決了我的許多問題。那麼有沒有辦法獲得我新創建的資源的擴展名和路徑,以便我可以將它保存到我的映像服務器中?我想使用腳趾move_uploaded_file($ image,$ final_path),但$ image需要是字符串 –

+0

大部分是通過$ _FILES []完成的。有些文檔可以查看:http://www.php.net/manual/en/reserved.variables.files.php 和http://www.php.net/manual/en/features.file-upload.php –

+0

@Andrew:也許我誤解了。您可以使用'imagepng($ imgresource,$ path)'將'$ imgresource'輸出到您想要的 –

2

此代碼旨在作爲輸出圖像返回 - 您可以將其用作圖像標記的有效src。也就是說,你可以這樣做:

<img src="thatfile.php?something=1" />

的頭告訴瀏覽器,服務器會發送數據的圖像(PNG圖像,特別是)。

在您的示例代碼中,文件從未真正被寫入任何地方:數據保留在內存中,直到腳本結束,然後它被簡單地「忘記」。 imagedestroy可以釋放內存並且是很好的練習,但實際上並不需要,因爲在請求結束後內存將被垃圾收集。如果要將圖像保存在文件中,則必須使用其中一個相關功能,例如imagepnghttp://www.php.net/manual/en/function.imagepng.php。在你的示例代碼中編寫文件或不編寫代碼的唯一區別是imagepng缺少第二個參數 - 第二個參數是所需的文件路徑。

這將有助於通讀有關整個主題的文檔,以便牢牢掌握這些功能的工作原理以及各自的功能。文檔頁面上有很多演示顯示了這一點。

1

這個特殊的例子通過POST從$_FILES數組獲取上傳的圖像,並將其輸出回瀏覽器。 header用於通知瀏覽器後面的內容是一個PNG圖像。

由於您從字符串創建圖像,它沒有「擴展名」。這只是一個圖像資源在這一點上。您可以使用imagepngimagejpeg或任何其他方法將圖像資源保存到文件中,從中創建實際文件。您自己決定在該階段分機(和文件名)。

例如爲:

imagepng($image, 'path/to/file.png'); 

,並在那裏將我放在move_uploaded_file()

因爲您沒有上傳的文件,所以您不會只有一個字符串。

相關問題