我需要在我的应用程序中的原始图像中间裁剪图像,以使我需要提供(x,y)坐标的裁剪,并使裁剪在给定坐标中开始。
所以我理解为了计算x和y我需要对两者应用相同的计算
请帮我理解计算裁剪图像的X坐标所需的内容。
originalWidth = 1200
newWidth = 600
startCroopAt = ?
即。 [x,y]
Image::crop(Yii::getAlias('@app/web/images/tmp/tmp_'.$name), $newWidth, $newHeight, [0,0])
->save(Yii::getAlias($path."/".$name), ['quality' => 80]);
感谢您帮助解释此问题。
答案 0 :(得分:3)
startCroopAt =(originalWidth - newWidth)/ 2
newPosition = previousPosition + startCroopAt
在一个简短的解释中,你应该计算减少指数以计算新的位置,这是通过用旧宽度减去旧的来计算的。 由于图像裁剪必须居中,因此您将索引除以2以模拟填充的排序。 因此,newPosition将是从裁剪前的初始位置开始的位移指数。
计算高度时,程序相同,但y轴和宽度为新高度。
希望这有帮助。
数字示例将是。
originalWidth = 1200
newWidth = 600
startCroopAt = (1200 - 600)/2 = 300
newPosition = 0 + 300
我认为previousPosition是原点,但如果使用previousPosition进行图像置换,则会解决它。
答案 1 :(得分:1)
我使用[Imagine]图像库来更轻松地完成图像裁剪。我喜欢它,因为它是文件类型不可知的并且支持透明PNG 。此功能还可以使用指定的宽度和高度调整图像大小。
$cropheight = $bottom - $top;
$cropwidth = $right - $left;
$target = "./images/cropped/";
$imagine->open($path)
->crop(new Point($top, $left), new Box($cropheight,$cropwidth))
->resize(new Box($width, $height))
->save($target);
我定义了裁剪时使用的最重要的参数。我正在使用大约1000x1000的图像,并希望大致在它的中心裁剪。
$uri="http://./smile.jpg";
$top = 90;
$left = 40;
$bottom = 800;
$right = 500;
$width = 920;
$height = 500;