2013-07-22 58 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