У меня есть JPG на моем сервере. я использую
imagecreatefromjpeg($imgPath);
чтобы открыть это. Я хочу сделать изображение размером 16×9, добавив черные полосы сверху вниз или слева или справа. (Считать background-size: contain; background-position: center;
) Это все что у меня есть:
$img_info = getimagesize($imgPath);
Я знаю, что мне нужно использовать ImageCreateTrueColor
сделать чистое изображение, imagecopyresampled
создать образ, и imagejpeg
чтобы сохранить это. Но я понятия не имею, как их собрать. Спасибо!
Это сделает свое дело:
$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.
Скопируйте оригинальное изображение в заданную позицию
Вывод, сделано.
Других решений пока нет …