使用GD调整图像大小问题

时间:2012-02-12 23:38:31

标签: php image resize gd

我使用GD库成功调整了图像大小。我将任何图像的大小调整为350 x 250,问题是当它们调整大小时,某些图片看起来不太好(拉伸),因为我将它们调整为固定大小。我有一个350 x 250的空间,其中调整大小的图片需要适合,我不介意如果图片尺寸小于350 x 250,只要它不伸展。我该如何解决这个问题?

                      $save = "$directory/" . $file_name; //This is the new file you saving
                      $file = "$directory/" . $file_name; //This is the original file

                      list($width, $height) = getimagesize($file) ; 
                      $modwidth = 350; 
                      if ($width > $height) {
                      $y = 0;
                      $x = ($width - $height) / 2;
                      $smallestSide = $height;
                    } else {
                      $x = 0;
                      $y = ($height - $width) / 2;
                      $smallestSide = $width;
                    }

                      $diff = $width / $modwidth;

                      $modheight = 250; 
                      $tn = imagecreatetruecolor($modwidth, $modheight) ; 
                      $image = imagecreatefromjpeg($file) ; 
                      imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height);
                      imagejpeg($tn, $save, 100) ;

1 个答案:

答案 0 :(得分:2)

尝试使用我之前写的这个函数:

    public function resize($img, $width, $height, $stretch = false)
    {
        $temp = imagecreatetruecolor($width, $height);
        imagealphablending($temp, true);
        imagesavealpha($temp, true);

        $bg = imagecolorallocatealpha($temp, 0, 0, 0, 127); // Background color
        imagefill($temp, 0, 0, $bg);

        if ($stretch)
        {
            imagecopyresampled($temp, img, 0, 0, 0, 0, $width, $height, imagesx($img), imagesy($img)); 
        }
        else
        {          
            if (imagesx($img) <= $width && imagesy($img) <= $height)
            {
                $fwidth = imagesx($img);
                $fheight = imagesy($img);
            }
            else
            {
                $wscale = $width / imagesx($img);
                $hscale = $height / imagesy($img);
                $scale = min($wscale, $hscale);
                $fwidth = $scale * imagesx($img);
                $fheight = $scale * imagesy($img);
            }
            imagecopyresampled($temp,                             
                $img,                                      
                ($width - $fwidth) / 2, ($height - $fheight) / 2,   
                0, 0,                                              
                $fwidth, $fheight,                                 
                imagesx($img), imagesy($img)               
            );
        }
        return $temp; 
    }

如果你说不拉伸图像,它会计算一个新尺寸,使其适合你的新尺寸。

将其用作:

...
$image = imagecreatefromjpeg($file);
$resized = resize($image, 350, 250, false); // false = don't stretch
imagejpeg($resized, $save, 100);
...

现在使用imagepng()将$调整大小存储在磁盘上。