php imagemagick - 如何在白色方块中间对图像进行平方而不裁剪

时间:2016-01-09 21:39:11

标签: php imagemagick

我在白色背景上有一系列图像。

我的问题是它们有各种各样的形状和大小,我希望它们的大小相等,并且都以正方形比例居中而不会裁剪并丢失任何实际图像。

以下是我迄今为止的最佳尝试(使用imagemagik),但是没有缩放它只是在80x80处裁剪方块而丢失了大部分内容

    $im = new Imagick("myimg.jpg");

    $im->trimImage(20000);

    $im_props = $im->getImageGeometry();

    $width = $im_props['width'];
    $height = $im_props['height'];
    $diff = abs($width-$height);

    $color=new ImagickPixel();
    $color->setColor("white");

    if($width > $height){
        $im->thumbnailImage(80, 0);
        $im->borderImage($color, ($diff/2), 0);
    }else{
        $im->thumbnailImage(0, 80);
        $im->borderImage($color, 0, ($diff/2));
    }

    $im->cropImage (80,80,0,0);

    $im->writeImage("altimg.jpg");

感激不尽的任何帮助

1 个答案:

答案 0 :(得分:4)

感谢@Mark Setchel指出我正确的方向。我设法达到了我想要的效果,(一个未裁剪的图像以白色方块为中心,并修剪为最长边)。

我已经对您的评论进行了投票,但我认为我会发布最终的完整代码。

    $im = new Imagick("myimg.jpg");

    $im->trimImage(20000);

    $im->resizeImage(80, 80,Imagick::FILTER_LANCZOS,1, TRUE);
    $im->setImageBackgroundColor("white");

    $w = $im->getImageWidth();
    $h = $im->getImageHeight();

    $off_top=0;
    $off_left=0;

    if($w > $h){
        $off_top = ((80-$h)/2) * -1;
    }else{
        $off_left = ((80-$w)/2) * -1;
    }

    $im->extentImage(80,80, $off_left, $off_top);

    $im->writeImage("altimg.jpg");