如何使用来自 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 的数据裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章
二维剪板机下料问题(2-D Guillotine Cutting Stock Problem) 的混合整数规划精确求解——数学规划的计算智能特征