gd — Обрезка изображений в PHP оставляет черное пространство

Вероятно, это дубликат, но каждое решение, которое я рассмотрел, кажется, не работает для меня, поэтому не уверен, что я делаю по-другому.

Я пока не слишком разбираюсь в манипуляциях с изображениями, но обрезка изображений, кажется, добавляет много черного пространства вокруг правого / нижнего края изображения, когда используется imagecopy, перед тем как поместить его поверх другого. Все они в формате JPEG.

Это моя функция обрезки:

function thumbImage($thumb_img,$img_size,$shape){
$width = 250;
$height = 250;

list($w, $h) = $img_size;

if($w > $h) {
$new_height =   $height;
$new_width  =   floor($w * ($new_height / $h));
$crop_x     =   ceil(($w - $h) / 2);
$crop_y     =   0;
} else {
$new_width  =   $width;
$new_height =   floor( $h * ( $new_width / $w ));
$crop_x     =   0;
$crop_y     =   ceil(($h - $w) / 2);
}

$tmp_img = imagecreatetruecolor($width,$height);
imagecopyresampled($tmp_img, $thumb_img, 0, 0, $crop_x, $crop_y, $new_width, $new_height, $w, $h);

return $tmp_img;
}

Будем весьма благодарны за любые решения с объяснением того, как это работает.

0

Решение

Попробуй это:

function thumbImage($source_img,$max_size){

list($w, $h) = getimagesize($source_img);

if($w>$h){
$width = ($max_size/$h)*$w;
$height = $max_size;
}else{
$width = $max_size;
$height = ($max_size/$w)*$h;
}

$x = ($max_size-$width)/2;
$y = ($max_size-$height)/2;

$thumb_img = imagecreatetruecolor($max_size,$max_size);
imagecopyresampled($thumb_img, $source_img, $x, $y, 0, 0, $width, $height, $w, $h);

return $thumb_img;
}
0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector