用于图像编辑的数学

时间:2012-05-02 08:51:36

标签: php math

我正在用PHP和Javascript创建一个图像编辑程序,但我无法计算出数学。

这个想法是,用户上传一张图片(它可能非常大,10 000 x 10000像素,它可以是500 x 500像素的小像素)并且它使用PHP调整大小以适应工作区(调整为更小或更大) 。工作区根据用户屏幕大小计算(使用Javascript)。存储原始图像并生成拇指。此时,用户可以旋转和裁剪图像。使用拇指图像进行裁剪和旋转以节省资源(使用PHP)。数据保存到会话中(数据与旋转角度,裁剪 - x,y,宽度,高度,调整大小 - 宽度和高度的比率(original_image_width / thumb_image_width))。当用户单击“完成”按钮时,所有这些步骤都将应用于原始图像。如果它正在旋转,则计算总角度以避免多次调用旋转功能。如果要进行裁剪,则必须计算xywidthheight,以便裁剪只进行一次。

现在这是变得复杂的地方。由于调整大小发生在每次裁剪之间(以适应工作区),我似乎无法计算出所需的变量(xywidth,{{1 }})。这是我到目前为止所拥有的。

height

我们的想法是从最后一个拇指计算list($width_original, $height_original) = getimagesize($_SESSION['original_file']); // default variables $angle = 0; $x = 1; $y = 1; $width = $width_original; $height = $height_original; $xx = 0; $yy = 0; $ratio_x = 1; $ratio_y = 1; foreach($_SESSION['history'] as $key => $history) { if($history['action'] == 'resize') { $ratio_x = $history['ratio_x']; $ratio_y = $history['ratio_y']; } if($history['action'] == 'crop') { $xx += ($width * $history['x']) / ($history['width'] * $ratio_x); $yy += ($height * $history['y']) / ($history['height'] * $ratio_y); $x = $history['x']; $y = $history['y']; $width = $history['width'] * $ratio_x; $height = $history['height'] * $ratio_y; } } x(它是适合工作区的调整大小,更小或更大的图片)并将它们添加到一起。之后,默认变量将替换为当前历史记录值。

我希望自己清楚明白。我的思绪再也无法理解,有人能指出我正确的方向吗?

编辑:我忘了添加会话数据。它看起来像这样:

y

1 个答案:

答案 0 :(得分:1)

如果我理解你正确你想要进行图像编辑,例如cropre-size等等,但是从你的代码中我有一些我不理解的东西,例如

  • $history
  • foreach($_SESSION['history'] as $key => $history)不确定为什么要循环历史
  • $ratio_x = 1; $ratio_y = 1;为什么你有多个比率

我期望从你的javascript中得到的东西就像

  • x1,y1
  • x2,y2
  • 角度
  • 高度
  • width
大多数情况下可能不需要

x2y2,特别是如果用户只想重新调整大小...您不需要xy比率......一个单一的口粮或量表是好的

简单计算

$ratio = $thumb_width/$width_original;
$newImageWidth = ceil($width * $ratio);
$newImageHeight = ceil($height * $ratio);

结论

有很多开源java脚本解决方案你可以看看哪个有PHP后端

http://www.webmotionuk.co.uk/php-jquery-image-upload-and-crop/

http://odyniec.net/projects/imgareaselect/

http://deepliquid.com/content/Jcrop_Download.html