为什么PHP呈现此图像不正确?

时间:2011-08-06 10:51:07

标签: 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
    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();
?>

问题是当我输入它时,例如: http://i52.tinypic.com/dzglmu.png

输出变为: http://i53.tinypic.com/15fg8w5.png

谁能告诉我这里出了什么问题?

1 个答案:

答案 0 :(得分:2)

嗯,这不是那么容易。 PNG和GIF携带有关alpha级别的信息,这些信息可能会丢失(因此会以其他颜色呈现)。另外,正如@hakre所说,浏览器提供的mime类型并不是真正可靠的信息。而且你的MIME还不完整,因为还有其他的可能性:作为一个例子,我在使用IE8时遇到了麻烦,因为它分配了MIME'image / x-png'而不是通常的'image / png',这很容易打破你的功能。 获取MIME的一种不错的可靠方法(如果图像真的是图像则进行评估,这是一个重要的步骤!)正在使用getimagesize()函数

$size = getimagesize($file);
$mime = $size['mime'];

getimagesize()返回一个包含4个索引的数组,I.E。:

  1. 0索引是图像的宽度(以像素为单位)。
  2. 1索引是图像的高度(以像素为单位)。
  3. 2索引是图像类型的标志:

      

    1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(orden)   de bytes intel),8 = TIFF(orden de bytes motorola),9 = JPC,10 = JP2,   11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。

  4. 3索引包含'height =“yyy”width =“xxx”'

  5. 我从我链接的手册页中获取了上述摘要,但您可以自己轻松测试,我只是在偷懒。

    然后你需要至少添加PNG:

    imagealphablending($img, true); // setting alpha blending on
    imagesavealpha($img, true); // save alphablending setting 
    

    但是请在the manual上查找更完整的示例或谷歌搜索它,因为这些只是建议,您需要调整您需要处理图像的情况。