2012-11-26 85 views
0

创建PHP我有一个PHP图片和化网页浏览器一个奇怪的问题..图片在Internet Explorer

首先,我知道PHP是一个服务器端语言和它无关的浏览器,但为什么地狱是我的脚本与Firefox或Safari或Chrome,而不是与Internet Explorer?

function image_effect_negative($counter,$file,$layer){ 


$image = "../images/tmp/$file/layer_$layer.png"; 


$img = imagecreatefrompng($image); 

if($layer == 0){ 
    $path = "../images/tmp/$file/$counter".".jpg"; 
}else{ 
    $path = "../images/tmp/$file/layer_$layer.png"; 
    $path2 = "../images/tmp/$file/tmp_layer_$layer.png"; 
} 

if($img && imagefilter($img, IMG_FILTER_NEGATE)){ 
    //imagepng($img, $path); 

    if($layer > 0) 
     imagepng($img, $path2); 
    else 
     imagejpeg($img,$path); 

    imagedestroy($img); 

    return $img; 
} 

}

我使用上面的代码,即负载layer_0.png(例如),并在其上使用的ImageFilter。与其他所有浏览器一起创建具有该效果的图像,但不在IE中!

出了什么问题?

+0

尝试将生成的PNG保存在firefox/chrome中,然后直接在IE中加载该图像。它可能是你的图像是腐败/不兼容的,只有一些浏览器才能打开它。 – MrGlass

+0

为什么最后返回'$ img'?那是一个无效的GD句柄,因为你事先已经对它做了一个'imagedestroy()' –

+0

IE的哪个版本?如果它小于7,它不支持alpha透明PNG的 – Alex

回答

0

当你在此之前销毁图像时,你期望返回什么?

imagedestroy($img); // why are you destroying the image? 

    return $img; 
} 

此外,您是否设置了正确的标题将图像返回给浏览器?

+0

对不起,返回$ img只是为了一些预先测试,忘了!我不想将图像显示到浏览器,但将其保存为文件! – elasticman

1

您使用的是哪个版本的Internet Explorer?已知旧版本的IE不支持png等透明类型。尝试添加PNG修复程序到您的页面的IE浏览器,看看是否修复它。你可以在这里找到PNG定影液:

http://jquery.andreaseberhard.de/pngFix/

+0

是的,谢谢,但我已经知道了!问题不是显示图像,而是创建它! – elasticman

0

我的猜测是,你是不是产生HTTP标头。有些浏览器能够检测到http://example.com/foo.php是否包含PNG或JPEG文件,而其他浏览器则不包含。它很简单:

if($layer > 0){ 
    header('Content-Type: image/png'); 
    imagepng($img, $path2); 
} 
else{ 
    header('Content-Type: image/jpeg'); 
    imagejpeg($img,$path); 
}