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

我现在到处搜索了两天,仍然没有帮助。</ p>

我的项目使用 jQuery Guillotine插件,允许用户在上传到我的php服务器之前选择图像大小和位置,但我 无法找出根据从前端收到的数据裁剪和缩放图像的正确方法。</ p>

以下是我尝试过的内容:</ p>

我正在尝试使用的响应如下所示:</ p>

  {scale:0.324,angle:0,x:110,y:34,w:300  ,h:300} 
</ code> </ pre>

然后是php代码:</ p>

  $ imagick = Image :: make($  destination。“/”。$ fileName); 
$ height = $ imagick-&gt; height();
$ width = $ imagick-&gt; width();

$ imagick-&gt; rotate($ req ['angle']);
//使用用户选择后收到的数据
$ imagick-&gt; cropImage((int)$ req ['w'],(int)$ req ['h'], (int)$ req ['x'],(int)$ req ['y']);
//将图像写入磁盘
$ imagick-&gt; save($ d estinationPathSmaller。 $ fileName);
</ code> </ pre>

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

谢谢inadvance,</ p>
</ div>

展开原文

原文

I've searched everywhere for two days now, still no help.

my project uses jQuery Guillotine Plugin to allow users select image size and position before uploading to my php server but i can't figure out the proper way to crop and scale the image based on the data received from the frontend.

Here is what i've tried:

The response i'm trying to work with looks like this:

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

Then the php code:

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

At this point, the picture doesn't display correctly. i really don't know what to do, this is my 3rd day on this. please help!

Thanks in inadvance,

duanjue9889
duanjue9889 是的,裁剪方法来自php干预,它使用Imagick作为它的驱动程序。我从前端获得的值看起来像:`{scale:1.4,angle:270,x:10,y:20,w:900,h:675}
4 年多之前 回复
doulu7921
doulu7921 而且,我只是好奇。这个Image类是PHP中的Imagick类的派生吗?它的裁剪方法与cropImage的工作方式相同吗?
4 年多之前 回复
dql7588
dql7588 您在$req数组中获得的值是多少?
4 年多之前 回复
douqie1852
douqie1852 这是第4点。)当我想保存文件时,我不知道如何裁剪数据以完全按照用户选择它的方式。
4 年多之前 回复
douqie1884
douqie1884 在这个过程的哪个部分,您遇到了故障?他们挑选一张图片。2.)他们改变了它的设置。3.)他们使用设置发布图像。4.)您保存文件。
4 年多之前 回复

2个回答



好的,所以我终于开始工作了。</ p>

感谢所有想要帮助的人, 这是我在其他人遇到同样问题时所做的事情:</ p>

使用干预< / a>和 Imagick </ em>作为驱动程序。</ p>

guillotine API,处理它并像这样使用它。</ p>

  $ imagick = Image :: make($ destination。“/”。  $ fileName); 
$ width = $ imagick-&gt; width()* $ req ['scale'];

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

//剪裁到所需的宽度和高度。

//注意:宽度和高度必须与实例化时在Guillotine配置中设置的宽度和高度相同。

$ imagick-&gt; crop($ req ['w'],$ req ['h'],$ req ['x'],$ req ['y']);

//最后, 保存你的文件
$ imagick-&gt; save($ new_destination。$ fileName);
</ code> </ pre>

这应该可以正常工作。</ p>
</ DIV>

展开原文

原文

Okay, so i finally got it working.

I thank everyone that tried to help, here is what i did in case someone else is faced with same issue:

Using Intervention and Imagick as the driver.

After collecting your data from the guillotine API, process it and use it like this.

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

That should just work perfectly.



我不确定它在复制和粘贴方面是否有所不同,但我认为这可能是对图书馆的一种简单误用。 / p>

一个人。 你有这一行:</ p>

  $ imagick = new Image($ destination。“/”。$ fileName); 
</ code> </ pre>

但他们建议您使用</ p>

  $ imagick = Image :: make($ destination。“/”。$ fileName); 
</ code> </ pre>

两者之间的区别在于,如果只是调用 new Image </ code>,驱动程序就不会被设置。 因此,裁剪方法只是简单地从他们拥有的AbstractDriver类中反弹并且什么也不做。 但你可以调用 Image :: make </ code>,它将返回驱动程序。</ p>

如果情况似乎并非如此,那么我也注意到你正在使用 writeImage < /代码>。 用于根据更改创建文件的PHP干预方法是 - &gt; save(); </ code> 。 我无法在任何地方找到 writeImage </ code>方法。</ p>
</ div>

展开原文

原文

I'm not sure if it's just a different in copying and pasting but I think this may be a simple misusage of the library.

For one. You have this line:

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

But they suggest that you use

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

The difference between the two is that a driver is not getting set if you simply call new Image. So the crop method simply bounces off the AbstractDriver class they have and does nothing. But you can call Image::make and it will return the driver.

If that doesn't seem to be the case then I also noticed that you're using writeImage. PHP Interventions method for creating a file based on changes is ->save();. I couldn't find the method writeImage anywhere.

dongsu1951
dongsu1951 我现在有工作,谢谢
4 年多之前 回复
dpy83214
dpy83214 我不知道。 我唯一能想到的是图像魔法没有正确配置。 但旋转也不会起作用。
4 年多之前 回复
duanlu7680
duanlu7680 这是一个错误的问题,我正在使用的是:$ imagick = Image :: make($ destination。“/”。$ fileName); 但目前我没有任何PHP错误,只是我的图像没有调整我想要的方式。 我在使用Imagick时使用writeImage来保存图像(不是在doc中,而是在工作中)。
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐