2013-07-22 100 views
1

我試圖從URL獲取圖像,然後將其保存到服務器。這是一個簡單的任務,是的,但是這個圖像具有透明度......事情是,當我將這個文件保存到我的電腦,或者當我嘗試通過PHP將它保存到我的服務器時,我得到相同的結果:圖像變得混亂,其透明度設置爲黑色。圖像的URL是:如何使用PHP獲取並保存此透明圖像

http://cellufun.com/p/avatarimage/agb.aspx?i=Body|M04001|Shirt|M10020|

另一個奇怪的是我的瀏覽器說,圖像是MIME類型的圖像/ PNG,但我不能使用imagecreatefrompng();因爲我得到的「形象不是一個有效的PNG」錯誤...

這裏是我的代碼(我沒有嘗試其他的解決方案,這就是我tryed的最後時間):

<?php 
$result=file_get_contents("http://cellufun.com/p/avatarimage/agb.aspx?i=Body|F04001|Shirt|F10020|Pants|MO55|"); 
$img = imageCreateFromstring($result); 
imageAlphaBlending($img, true); 
imageSaveAlpha($img, true); 
imagecolortransparent($img); 


header("Content-type: image/png"); 
imagepng($img); 
?> 

哦,我只是tryed這一形象對副本()函數,並仍然得到同樣的結果......它看起來就像圖像尺寸較小,則原始圖像... 只是tryed這一點:

file_put_contents("files/test.png",file_get_contents($result)); 

和仍然無法正常工作...所以它與圖像本身有關,因爲無論我嘗試獲取圖像數據,它不起作用。

+1

爲什麼你使用'imagegif'而不是'imagepng'? – mhafellner

+0

因爲這個:'我不能使用imagecreatefrompng();因爲我得到了「圖像不是有效的PNG」錯誤......'正如我已經提到@ Markus403 ...和我正在使用imagecreatefromstring() –

+0

問題*可能*是與您的代碼發送表示圖像是PNG的標題,然後發送GIF。什麼是糟糕的瀏覽器要做什麼? – michaelb958

回答

0

試試這個代碼(在2-4行的變化):

<?php 
$img = imageCreateFromgif("http://cellufun.com/p/avatarimage/agb.aspx?i=Body|M04001|Shirt|M10020|"); 
$index = imagecolorexact($img, 0, 0, 0); 
imagecolortransparent($img, $index); 

header("Content-type: image/png"); 
imagepng($img); 
?> 

它爲我的作品,雖然這是一個小竅門;)..和我不知道爲什麼質量要差..

PS:我看到的主要問題是,您提供的網址上的圖像並不是真正的png。

+0

是的,這是這裏的主要問題,因爲MIME類型和文件內容並不真正地攜手:(無論如何,我會試試:) –

+0

好吧,我試了一下,它的工作! (部分):(如你所說的圖像質量仍然可怕...任何想法,我怎麼可以過濾這個獲得更好的圖像質量...... PS:我想通了,我只需要把0作爲索引,它的工作原理即使沒有imagecolorexact();) –

+0

對於不好的圖像質量:我不知道如何糾正,因爲據我看你必須使用'imageCreateFromgif'將圖像轉換成256色圖像,從而導致可怕的質量。 – mhafellner