为什么PHP呈现此图像不正确?
我尝试拍摄图像(.gif、.jpg或.png),并将其输出为.png 这是我使用的代码:为什么PHP呈现此图像不正确?,php,png,gd,Php,Png,Gd,我尝试拍摄图像(.gif、.jpg或.png),并将其输出为.png 这是我使用的代码: <?php $filename = urlencode($_FILES['uploadfile']['name']); $size = getimagesize($tempname); switch($size["mime"]){ case "image/jpeg": $img = imagecreatefromjpeg($tempname); //jpeg file
<?php
$filename = urlencode($_FILES['uploadfile']['name']);
$size = getimagesize($tempname);
switch($size["mime"]){
case "image/jpeg":
$img = imagecreatefromjpeg($tempname); //jpeg file
break;
case "image/gif":
$img = imagecreatefromgif($tempname); //gif file
break;
case "image/png":
$img = imagecreatefrompng($tempname); //png file
break;
default:
die('Unknown filetype');
break;
}
ob_start();
imagepng($img);
$content = ob_get_contents();
ob_end_clean();
?>
问题是当我输入这个时,例如:
输出如下:
有人能告诉我这里出了什么问题吗?嗯,其实没那么容易。PNG和GIF包含有关alpha级别的信息,这些信息可能会丢失(从而以另一种颜色呈现)。另外,正如@hakre所说,浏览器提供的mime类型并不是一个真正可靠的信息。您的MIME不完整,因为还有其他可能:例如,我在IE8上遇到了一些问题,因为它将MIME指定为“image/x-png”,而不是通常的“image/png”,这很容易破坏您的功能。 获取MIME的一个很好的可靠方法(以及评估图像是否真的是图像,这是一个重要的步骤!)是使用函数
getimagesize()
返回一个包含4个索引的数组,即:
imagealphablending($img, true); // setting alpha blending on
imagesavealpha($img, true); // save alphablending setting
但是,请在上或谷歌上查找更完整的示例,因为这些只是建议,您需要适应您需要处理图像的程度。第二个链接对我说
图像”http://i53.tinypic.com/15fg8w5.png无法显示,因为它包含错误。
。这就是你想要显示的吗?在我的浏览器中,它显示了:(这是图像的屏幕截图)首先清理上传的图像数据,不要依赖浏览器报告的mime/类型。此信息可能是错误的,然后使用错误的功能。
imagealphablending($img, true); // setting alpha blending on
imagesavealpha($img, true); // save alphablending setting