2

我需要在我的应用程序的原始图像中间裁剪一个图像,以进行裁剪,我需要提供(x,y)坐标,这使得裁剪从给定的坐标开始。
所以我明白为了计算 x 和 yi 需要对两者应用相同的计算。
请帮助我了解计算 X 坐标以裁剪图像所需的内容。

originalWidth = 1200   
newWidth = 600   
startCroopAt = ?

IE[x,y]

Image::crop(Yii::getAlias('@app/web/images/tmp/tmp_'.$name), $newWidth, $newHeight, [0,0])
        ->save(Yii::getAlias($path."/".$name), ['quality' => 80]);

感谢您对此解释的帮助。

4

2 回答 2

3

startCroopAt = (originalWidth - newWidth) / 2

newPosition = previousPosition + startCroopAt

简而言之,您应该计算减少指数以计算新位置,即通过用新宽度减去旧位置来计算。由于图像裁剪必须居中,您将索引除以二以模拟填充排序。这样,newPosition 将是从裁剪前的初始位置开始的位移索引。

在计算高度时,它是相同的过程,但在 y 轴和宽度上是新的高度。

希望这可以帮助。

数字示例将是。

originalWidth = 1200   
newWidth = 600   
startCroopAt = (1200 - 600)/2 = 300
newPosition = 0 + 300

我猜 previousPosition 是原点,但如果有图像位移,使用 previousPosition 可以解决它。

于 2017-10-24T18:10:04.460 回答
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;
于 2017-10-25T23:58:32.233 回答