Добавьте черные полосы, чтобы создать изображение 16×9

У меня есть JPG на моем сервере. я использую

imagecreatefromjpeg($imgPath);

чтобы открыть это. Я хочу сделать изображение размером 16×9, добавив черные полосы сверху вниз или слева или справа. (Считать background-size: contain; background-position: center;) Это все что у меня есть:

$img_info = getimagesize($imgPath);

Я знаю, что мне нужно использовать ImageCreateTrueColor сделать чистое изображение, imagecopyresampled создать образ, и imagejpeg чтобы сохранить это. Но я понятия не имею, как их собрать. Спасибо!

2

Решение

Это сделает свое дело:

$im=imagecreatefromjpeg ($imgPath);
$width=ImageSX($im); $height=ImageSY($im); $ratio=16/9;
$width_out=$width; $height_out=$height;
if ($height_out*$ratio<$width_out) {$height_out=floor($width_out/$ratio);} else {$width_out=floor($height_out*$ratio);}
$left=round(($width_out-$width)/2);
$top=round(($height_out-$height)/2);
$image_out = imagecreatetruecolor($width_out,$height_out);
$bg_color = ImageColorAllocate ($image_out, 0, 0, 0);
imagefill($image_out,0,0,$bg_color);
imagecopy($image_out, $im, $left, $top, 0, 0, $width,$height);
imagejpeg($image_out);

Как это работает: вы создаете контейнер $ im и проверяете ширину и высоту.
После этого скрипт проверяет, какая сторона меньше другой (умножается / делится на соотношение) и корректирует выходной размер.
Вычислите, где должно располагаться исходное изображение (выравнивание по центру), разделив разницу между размерами исходного и выходного изображений на 2.
Скопируйте оригинальное изображение в заданную позицию
Вывод, сделано.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]