2

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

这是我正在采取的步骤。

  1. 创建 GD 图像资源。
  2. 获取图像的高度和宽度
  3. 创建一个 100 像素高、适当宽度的空白 gd 图像资源
  4. 将资源图像复制到空白 gd 图像资源并保存两个图像

这是我的代码:

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']}");

}

图像正在保存,但无法复制,缩略图中有空白区域。

这是原始图像: 在此处输入图像描述

这是用gd再次保存的图像: 在此处输入图像描述

这是缩略图: 在此处输入图像描述

我喜欢四重检查 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 )

有人有任何想法吗?

4

2 回答 2

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
于 2014-09-09T11:54:02.363 回答
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

于 2017-01-10T22:28:34.503 回答