@apptimeru

Как правильно ресайзить изображение на PHP?

Есть исходное изображение размерами 224х450, нужно чтобы все изображение по высоте влезло в новый размер 250x300 а по ширине выравнивалось посредине, остатки фона заливались белым. Пример на картинке:

630a41f065f65723923220.jpeg

Серый фон на картинки, просто для наглядности (вообще должен быть белым). Я уже все перепробывал, вроде получилось ужать картинку, но почему-то края заливаются черным цветом, хотя прописываю

imagefill($image_n, 0, 0, imagecolorallocate($image_n, 255, 255, 255));

Подскажите код от получения картинки до вывода в файл, буду очень благодарен)
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 1
Wacdis
@Wacdis
PHP, Python, GO, Rust, NodeJS, SOA/MSA
Если задача вписать изображение, то вычисляете соотношения обоих изображений (источник и цель) и с помощью их вычисляете нужные width, height и top/left точку, вставляете. Что-то типа этого:
$k1 = ($width / $height);
$k2 = ($source_width / $source_height);
if ($k1 > $k2) {
  $w_lt = round(($width-($height*$k2))/2);
  $h_lt = 0;
  $w_rb = round(($height*$k2));
  $h_rb = $height;
} elseif ($k1 < $k2) {
  $w_lt = 0;
  $h_lt = round(($height-round($width/$k2))/2);
  $w_rb = $width;
  $h_rb = round($width/$k2);
} else {
  $w_lt = 0;
  $h_lt = 0;
  $w_rb = $width;
  $h_rb = $height;
}
$image_modified = imagecreatetruecolor($width,$height);
if ($isPNG) {imageAlphaBlending($image_modified, false);imageSaveAlpha($image_modified, true);}
imagecopyresampled($image_modified, $image, $w_lt, $h_lt, 0, 0, $w_rb, $h_rb, $source_width, $source_height);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы