Php GD Library PNG显示问题

时间:2014-10-21 08:18:20

标签: php apache browser png gd

我有一个GD库上传脚本,用于处理和调整图像大小。上传PNG后,在浏览器端将渲染呈现为不同的图像,一些看起来像股票的图像,但在磁盘上打开它们是正确的。我通过photoshop重新保存了受影响的png并直接上传,这解决了显示问题,但是当我通过脚本上传该图像时,显示问题会返回,因此脚本编码似乎会导致浏览器显示问题,但为什么我不知道。

托管环境是Hetzner Server。 上传样本:

//resize images
protected function resize($img, $w, $h, $newfilename) {
    //Check if GD extension is loaded
    if (!extension_loaded('gd') && !extension_loaded('gd2')) {
        trigger_error("GD is not loaded", E_USER_WARNING);
        return false;
    }

    //Get Image size info
    $imgInfo = getimagesize($img);

    switch ($imgInfo[2]) {
        case 1: $im = imagecreatefromgif($img); break;
        case 2: $im = imagecreatefromjpeg($img);  break;
        case 3: $im = imagecreatefrompng($img); break;
        default:  trigger_error('Unsupported filetype!', E_USER_WARNING);  break;
    }

    //If image dimension is smaller, do not resize
    if ($imgInfo[0] <= $w && $imgInfo[1] <= $h) {
        $nHeight = $imgInfo[1];
        $nWidth = $imgInfo[0];
    }
    else{
    // yeah, resize it, but keep it proportional
        if ($w/$imgInfo[0] > $h/$imgInfo[1]) {
            $nWidth = $imgInfo[0]*($h/$imgInfo[1]);
            $nHeight = $h;            
        }
        else{
            $nWidth = $w;
            $nHeight = $imgInfo[1]*($w/$imgInfo[0]);
        }
    }

    $nWidth = round($nWidth);        
    $nHeight = round($nHeight);      
    $newImg = imagecreatetruecolor($nWidth, $nHeight);

    /* Check if this image is PNG or GIF, then set if Transparent*/
    if(($imgInfo[2] == 1) OR ($imgInfo[2]==3)){
        imagealphablending($newImg, false);
        imagesavealpha($newImg,true);
        $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
        imagefilledrectangle($newImg, 0, 0, $nWidth, $nHeight, $transparent);
    }
    imagecopyresampled($newImg, $im, 0, 0, 0, 0, $nWidth, $nHeight, $imgInfo[0], $imgInfo[1]);

    //Generate the file, and rename it to $newfilename
    switch ($imgInfo[2]) {
        case 1: imagegif($newImg,$newfilename); break;
        case 2: imagejpeg($newImg,$newfilename,100);  break;
        case 3: imagepng($newImg,$newfilename,0); break;
        default:  trigger_error('Failed resize image!', E_USER_WARNING);  break;
    }
    return $newfilename;
}

任何人都可以给我一些洞察力。如有必要,将提供更多信息。 TY

编辑: Browser Display Disk Display

我不知道该图片来自哪里,它是多次上传的,当浏览浏览器上图像的完整路径时会出现相同的图像,因此它不是路径问题。

0 个答案:

没有答案