使用JS和PHP裁剪和旋转图像

时间:2011-10-17 09:26:55

标签: php javascript image-manipulation rotation crop

谷歌搜索了几天的工具后,除了Kroppr之外我什么都没找到,但是我无法承诺使用在部署之前无法在本地测试的工具。

我需要的是能够为用户提供裁剪和旋转图像的工具,并让服务器保存它,覆盖原始图像。似乎有很多裁剪工具,但没有什么可以旋转。

有这样的工具吗?

3 个答案:

答案 0 :(得分:7)

还没有人回答这个问题?嗯,我认为你很难找到一个能完全符合你喜欢的工具。我想你正在寻找类似于Kroppr的东西,但与服务无关。

所以这里有一些资源可以用来构建一个!

http://code.google.com/p/jqueryrotate/

http://raphaeljs.com/

这两个看起来都非常可靠,可让您旋转图像。

将此项与裁剪器结合使用。显示图像的外观。

现在这里是偷偷摸摸的部分。你只需要跟踪两件事。

1)选定的旋转角度0-360

2)作物的x1,y1,x2,y2。

收集完这些数据后,调用服务器上的php脚本并传递图像处理的值(angle,x1,y1,x2,y2)这​​可以通过ajax进行POST,表单提交,或者您甚至可以使用GET并直接将它们作为变量发送到URL

现在使用GD进行PHP中的所有图像处理。

<?php
//Incoming infomation. This should be set by $_GET[] or $_POST[] rather than the hardcoded examples.
$x1 = 100;
$y1 = 100;
$x2 = 400;
$y2 = 400;
$degrees = 47;
$filename = 'images/ducks.jpeg';

//find the original image size
$image_info = getimagesize($filename);
$original_width = $image_info[0];
$original_height = $image_info[1];

//calculat what the new image size should be.
$new_width = abs($x2 - $x1);
$new_height = abs($y2 - $y1);


$image_source = imagecreatefromjpeg($filename);

//rotate
$rotate = imagerotate($image_source, $degrees, 0);

//rotating an image changes the height and width of the image.
//find the new height and width so we can properly compensate when cropping.
$rotated_width = imagesx($rotate);
$rotated_height = imagesy($rotate);

//diff between rotated width & height and original width & height
//the rotated version should always be greater than or equal to the original size.
$dx = $rotated_width - $original_width;
$dy = $rotated_height - $original_width;

$crop_x = $dx/2 + $x1;
$crop_y = $dy/2 + $y1;


$new_image = imagecreatetruecolor($new_width, $new_height);

imagecopyresampled($new_image, $rotate, 0, 0, $crop_x, $crop_y, $new_width, $new_height, $new_width, $new_height);

//save over the old image.
imagejpeg($new_image, $filename);
?>

这只是一个快速而又肮脏的例子。如果你想让它适用于jpeg以外的图像类型,你需要做一些检查并使用GD的其他方法来处理.pngs或.gifs。旋转和裁剪代码将保持不变。

大部分修修补补现在都在前端,我将由你决定。您需要捕获的只是旋转角度和x,y裁剪点。

希望这很有帮助。如果你需要更多关于前端的帮助,请告诉我。

P.S。我会发布更多资源链接,但显然我只能发帖2,因为我的声誉还不够高。

答案 1 :(得分:1)

上面的答案真的很好,但你可以看看

http://phpthumb.sourceforge.net/ - 用于裁剪

http://code.google.com/p/jqueryrotate/ - jQuery旋转(上面发布)

这两个在我的所有项目中都很好用

答案 2 :(得分:1)

我还发现了另一种使用javascript裁剪图像的方法,让服务器实现更改。 please check out this project on git。我仍在测试它,但是,每当我完美地完成它时,我将很快提供一些代码片段。 Image Cropper