Вероятно, это дубликат, но каждое решение, которое я рассмотрел, кажется, не работает для меня, поэтому не уверен, что я делаю по-другому.
Я пока не слишком разбираюсь в манипуляциях с изображениями, но обрезка изображений, кажется, добавляет много черного пространства вокруг правого / нижнего края изображения, когда используется 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;
}
Будем весьма благодарны за любые решения с объяснением того, как это работает.
Попробуй это:
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;
}
Других решений пока нет …