如何使用 jQuery 带有 Imagick 的 Guillotine 插件的数据裁剪图像

How to crop an image using data from jQuery Guillotine Plugin with Imagick

我到处找了两天,还是没有任何帮助。

我的项目使用 jQuery Guillotine Plugin 允许用户 select 在上传到我的 php 服务器之前图像大小和位置,但我无法找到裁剪和缩放图像的正确方法基于从前端接收到的数据的图像。

这是我试过的方法:

我尝试处理的响应如下所示:

{ scale: 0.324, angle: 0, x: 110, y: 34, w: 300, h: 300 }

然后php代码:

$imagick = Image::make($destination . "/" . $fileName);
$height = $imagick->height();
$width = $imagick->width();

$imagick->rotate($req['angle']);
//using the data recieved after user selection
$imagick->cropImage((int)$req['w'], (int)$req['h'], (int)$req['x'], (int)$req['y']);
//Write image to disk
$imagick->save($destinationPathSmaller . $fileName);

此时图片显示不正确。我真的不知道该怎么办,这是我的第 3 天。请帮忙!

提前致谢,

我不确定这是否只是复制和粘贴的不同,但我认为这可能是对库的简单误用。

一个。你有这条线:

$imagick = new Image($destination . "/" . $fileName);

但是他们建议你使用

$imagick = Image::make($destination . "/" . $fileName);

两者之间的区别在于,如果您只是调用 new Image,则不会设置驱动程序。所以 crop 方法只是从他们拥有的 AbstractDriver class 反弹并且什么都不做。但是你可以调用 Image::make 它会 return the driver.

如果情况并非如此,那么我还注意到您正在使用 writeImage。 PHP 基于更改创建文件的干预方法是 ->save();。我在任何地方都找不到方法 writeImage

好的,我终于让它工作了。

我感谢所有试图提供帮助的人,如果其他人遇到同样的问题,我会这样做:

使用 InterventionImagick 作为驱动程序。

guillotine API 收集数据后,像这样处理和使用它。

$imagick = Image::make($destination . "/" . $fileName);
$width = $imagick->width() * $req['scale'];

$imagick->rotate($req['angle']);
$imagick->widen($width);

//Crop to desired width and height. 
//Note: the width and height has to be same with what you set on your Guillotine config when instantiating it. 
$imagick->crop($req['w'], $req['h'], $req['x'], $req['y']);

//Finally, Save your file
$imagick->save($new_destination . $fileName);

那应该会很完美。