Как создавать эскизы изображений в PHP в размерах 300X200?

62
7

Я использую приведенный ниже код для создания эскизов изображений в PHP. Он генерирует миниатюры, пропорциональные размерам высоты и ширины изображения.

make_thumb('images/image.jpg', 'images-generated-thumbs/7.jpg', 300, 200);

function make_thumb($src, $dest, $desired_width, $desired_height) {

/* read the source image */
$source_image = imagecreatefromjpeg($src);
$width = imagesx($source_image);
$height = imagesy($source_image);

/* find the "desired height" of this thumbnail, relative to the desired width */
$desired_height = floor($height*($desired_width/$width));
$desired_width = floor($width*($desired_height/$height));

/* create a new, "virtual" image */
$virtual_image = imagecreatetruecolor($desired_width, $desired_height);

/* copy source image at a resized size */
imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);

/* create the physical thumbnail image to its destination */
imagejpeg($virtual_image, $dest);
}

В приведенном выше примере он генерирует миниатюру 7.jpg с размером 299x187. Итак, мой вопрос заключается в том, как заполнить остальные пиксели ((300-299) x (300-187)) белым цветом. Если мы удалим переменную $desired_height в приведенном выше коде, она точно генерирует эскиз с шириной 300, поэтому нужно только заполнить остальную высоту белым цветом.

спросил(а) 2021-01-19T13:31:05+03:00 2 месяца, 3 недели назад
1
Решение
76

Перед изменением ширины/высоты сохраните их:

$actual_width = $desired_width;
$actual_height = $desired_height;
$desired_height = floor($height*($desired_width/$width));
$desired_width = floor($width*($desired_height/$height));

Когда вы делаете холст:

/* create a new, "virtual" image */
$virtual_image = imagecreatetruecolor($actual_width, $actual_height);

Виртуальное изображение на данный момент черное, залейте его белым:

$white = imagecolorallocate($virtual_image, 255, 255, 255);
imagefill($virtual_image, 0, 0, $white );

ответил(а) 2021-01-19T13:31:05+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема