我现在到处搜索了两天,仍然没有帮助。
我的项目使用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);
此时,图片无法正确显示。我真的不知道该怎么办,这是我的第3天。请帮忙!
感谢inadvance,
答案 0 :(得分:0)
我不确定它在复制和粘贴方面是否有所不同,但我认为这可能是对图书馆的一种简单误用。
一个人。你有这一行:
$imagick = new Image($destination . "/" . $fileName);
但他们建议您使用
$imagick = Image::make($destination . "/" . $fileName);
两者之间的区别在于,如果您只是致电new Image
,则不会设置驱动程序。因此,裁剪方法只是简单地从他们拥有的AbstractDriver类中反弹并且什么也不做。但是你可以致电Image::make
,它会return the driver。
如果情况似乎并非如此,那么我也注意到您正在使用writeImage
。用于根据更改创建文件的PHP Interventions方法是->save();
。我无法在任何地方找到方法writeImage
。
答案 1 :(得分:0)
好的,所以我终于开始工作了。
我感谢所有试图提供帮助的人,这就是我所做的,以防其他人遇到同样的问题:
使用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);
这应该是完美的。