Библиотека PHP GD изменяет размер

Я пытаюсь создать миниатюры фотографий с помощью библиотеки GD в PHP.

Вот шаги, которые я предпринимаю.

  1. Создайте ресурс GD Image.
  2. Получить высоту и ширину изображения
  3. создать пустой ресурс изображения gd со скоростью 100 пикселей с соответствующей шириной
  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 ) 

У кого-нибудь есть идеи?

Взгляните на это: 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 

Работа с 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 сделать это вручную, проверьте свои параметры imagecopyresized . Почему ширина умножается на $ratio ?