gpt4 book ai didi

php imagemagick - 如何在不裁剪的情况下在白色正方形中间对图像进行方形处理

转载 作者:行者123 更新时间:2023-12-03 20:19:22 25 4
gpt4 key购买 nike

我有一系列白色背景的图片。

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

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

感谢您的帮助

最佳答案

感谢@Mark Setchel 为我指明了正确的方向。我设法实现了我想要的效果(未裁剪的图像以白色方 block 为中心并修剪到最长的边)。

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

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

关于php imagemagick - 如何在不裁剪的情况下在白色正方形中间对图像进行方形处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34699245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com