在PHP中裁剪图像会留下黑色空间

时间:2017-10-27 16:00:55

标签: php gd crop

这可能是重复的,但我看过的每个解决方案似乎都不适合我,所以不确定我的做法有多么不同。

我对图像处理还不太了解,但是当使用imagecopyresampled将图像置于另一个图像上时,裁剪图像似乎会在图像的右/底部周围添加大量黑色空间。它们都是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;
}

非常感谢任何解释其工作原理的解决方案。

1 个答案:

答案 0 :(得分: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;
}