给定x& y坐标

时间:2017-10-24 18:09:24

标签: image yii2 php-imagine

我需要在我的应用程序中的原始图像中间裁剪图像,以使我需要提供(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]);

感谢您帮助解释此问题。

2 个答案:

答案 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;