PHP图像处理——如何在白方正方形中画一幅不需裁剪的图像

PHP图像处理——如何在白方正方形中画一幅不需裁剪的图像,php,imagemagick,Php,Imagemagick,我有一系列白色背景的图像 我的问题是,它们的形状和大小各不相同,我希望它们的大小都相同,并且都以平方比为中心,而不会裁剪和丢失任何实际图像 下面是我迄今为止最好的尝试(使用imagemagik),但它不是缩放,它只是在80x80处裁剪正方形,并丢失了大部分内容 $im = new Imagick("myimg.jpg"); $im->trimImage(20000); $im_props = $im->getImageGeometry(); $w

我有一系列白色背景的图像

我的问题是,它们的形状和大小各不相同,我希望它们的大小都相同,并且都以平方比为中心,而不会裁剪和丢失任何实际图像

下面是我迄今为止最好的尝试(使用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");

感谢马克·塞切尔为我指明了正确的方向。我设法实现了我想要的(一张未裁剪的图像,以白色正方形为中心,修剪到最长的一面)

我对你的评论投了赞成票,但我想我会发布我的最终代码以确保完整性

    $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");

请尝试将
大小调整为
80x80
,然后使用
gravity=center
,将
extent
设置为
80x80
。哦,在设置
范围之前,将
背景设置为
白色
。谢谢您的回答,但我需要在php中执行此操作,而不是使用命令行
Imagick::resizeImage()
Imagick::extentImage()
Imagick::setBackgroundColor()
…尝试发布一些图像…做得好!感谢您与社区分享您的代码。投票吧!