PHP GD库调整大小照片

时间:2013-03-08 07:36:59

标签: php gd

我正在尝试使用PHP的GD库创建照片的缩略图。

以下是我要采取的步骤。

  1. 创建GD图像​​资源。
  2. 获取图像的高度和宽度
  3. 以100像素高的宽度创建适当宽度的空白gd图像资源
  4. 将资源图像复制到空白gd图像资源并保存两个图像
  5. 这是我的代码:

    private function getExtension($filename) {
        $position=strrpos($filename, '.');
        $extension = strtolower(substr($filename, $position+1));
        if ($extension == "jpg") {
            $extension = "jpeg";
        }
    
        return $extension;
    }
    
    public function saveImage($parameters) {
        $extension=$this->getExtension($parameters['filename']);
        $createImageFunc="imagecreatefrom".$extension;
        $imgResource=$createImageFunc(SITE_PATH."tmp/{$parameters['filename']}");
        $width=imagesx($imgResource);
        $height=imagesy($imgResource);
        $ratio=$height/$width;
        $thumbnail=imagecreatetruecolor(100, 100*$ratio);
    
        imagecopyresized($thumbnail, $imgResource, 0, 0, 0, 0, 100*$ratio, 100, $width, $height);
    
        $imgResult=imagejpeg($imgResource, SITE_PATH."images/{$parameters['galleryName']}/{$parameters['filename']}");
        $thumbResult=imagejpeg($thumbnail, SITE_PATH."images/{$parameters['galleryName']}/thumbnails/{$parameters['filename']}");
    
    }
    

    图像正在保存,但副本无效,缩略图中有空黑色空间。

    这是原始图片: enter image description here

    这是使用gd再次保存的图像: enter image description here

    这是缩略图: enter image description here

    我喜欢四重检查imagecopyresize,根据我的理解,代码中的所有值都应该是正确的。

    以下是php.net对值的看法:

    bool imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
    

    有人有任何想法吗?

2 个答案:

答案 0 :(得分:0)

看看这个:PHP/GD Imagestyle
您可以轻松创建缩略图或所需的一切

// create a thumbnail
$thumb = imagestyle($image,'autosize:100 100');
// resize the image # resize:200 0; means width=200 height=auto
$resized = imagestyle($image,'resize:200 0;');
// crop it # left=0, top=50, width=200, height=200
$cropped = imagestyle($image,'crop:0 50 200 200;');
// and more

答案 1 :(得分:0)

使用PHP / GD可能很乏味,所以我写了一个库让事情变得更容易:SimpleImage

使用SimpleImage,您可以用两个简单的行创建缩略图:

// Load image from image.jpg
$image = new \claviska\SimpleImage('image.jpg');

// Create a 100x100 thumbnail, convert to PNG, and save to thumb.png
$image->thumbnail(100, 100)->toFile('thumb.png', 'image/png');

如果您仍然愿意手动执行此操作,请检查imagecopyresized参数。为什么宽度乘以$ratio