如何使用来自 jQuery Guillotine Plugin 和 Imagick 的数据裁剪图像

Posted

技术标签:

【中文标题】如何使用来自 jQuery Guillotine Plugin 和 Imagick 的数据裁剪图像【英文标题】:How to crop an image using data from jQuery Guillotine Plugin with Imagick 【发布时间】:2016-02-25 22:10:34 【问题描述】:

我已经到处搜索了两天了,仍然没有帮助。

我的项目使用jQuery Guillotine Plugin 允许用户在上传到我的 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);

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

提前谢谢,

【问题讨论】:

您在流程的哪个部分遇到了故障? 1. 他们选择一张图片。 2.) 他们改变了它的设置。 3.)他们发布带有设置的图像。 4.) 你保存文件。 这是第 4 点。)当我想保存文件时,我不知道如何裁剪数据以完全符合用户选择的方式。 您在 $req 数组中返回的值是什么? 另外,我只是好奇。这个 Image 类是 PHP 中 Imagick 类的派生词吗?它的crop 方法是否与cropImage 一样工作? 是的,crop 方法来自 php 干预,它使用 Imagick 作为驱动程序。我从前端得到的值看起来像:` scale: 1.4, angle: 270, x: 10, y: 20, w: 900, h: 675 ` 【参考方案1】:

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

对于一个。你有这一行:

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

但他们建议你使用

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

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

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

【讨论】:

那是问题中的一个错误,我使用的是:$imagick = Image::make($destination . "/" . $fileName); 但目前我没有任何 php 错误,只是我的图像没有按照我想要的方式调整大小.我使用writeImage 来保存使用Imagick 时使用的图像(不在文档中但有效)。 我不知道。我唯一能想到的另一件事是图像魔术配置不正确。但是这样旋转也不起作用。【参考方案2】:

好吧,我终于搞定了。

感谢所有试图提供帮助的人,如果其他人遇到同样的问题,我会采取以下措施:

使用 Intervention 和 Imagick 作为驱动程序。

从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);

这应该可以完美地工作。

【讨论】:

以上是关于如何使用来自 jQuery Guillotine Plugin 和 Imagick 的数据裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章

JQuery Guillotine:触发多个更改事件

jquery 裁剪插件尺寸的角度指令在移动设备上已关闭

在运行 jQuery 之前以模式加载图像 [重复]

二维剪板机下料问题(2-D Guillotine Cutting Stock Problem) 的混合整数规划精确求解——数学规划的计算智能特征

如何使用来自谷歌的外部托管 jquery 覆盖核心 jquery 文件

如何使用 jQuery 显示来自 JSON 的多个数组?