0

我的文件系统上有一个图像。我使用裁剪工具将其显示在页面上,但我将其缩小以适合裁剪工具区域(如果图像小于该区域,则将其拉伸以占据整个区域)。在此页面上,用户将选择要保留的照片区域(使用 jcrop)并提交。

在后端,我将等待上一页的坐标。我将得到 x1、x2、y1、y2、w 和 h。

问题是调整大小的图像(显示给用户的图像)上的坐标在全尺寸图像上并不容易使用,因为它们要么占小于图像的区域(它被缩小以适合屏幕)或者它会比图像大(它被拉伸以适应屏幕)。

我可以获得原始照片的高度和宽度以及它被强制进入的静态宽度和高度。

给定已知尺寸,您将如何找到图像的正确区域?

我当前的代码在这里

$target_width = 150;
$target_height = 150;
$jpeg_quality= 90;
$tmp =explode('/',$_POST['filename']); 

$src = '../uploads/'.$tmp[count($tmp)-1];

$x1 = $_POST['x1'];
$x2 = $_POST['x2'];
$y1 = $_POST['y1'];
$y2 = $_POST['y2'];
$w = $_POST['w'];
$h = $_POST['h'];

$image = imagecreatefromjpeg($src);
$final = imagecreatetruecolor($target_width, $target_height);

imagecopyresampled($final, $image, 0, 0, $x1, $y1, $target_width, $target_height, $w, $h);
imagejpeg($final, $src, $jpeg_quality);
4

2 回答 2

1

也许我的问题不是很清楚(我也很难向某人解释 IRL),但我的回答应该很清楚。

我的文件系统上有一个图像(路径可在 $_POST['image_path'] 获得)和一个看起来像“”的图像标签。我使用一些 jquery 魔法从图像标签中获取了数据。

“比例”就是答案。
h_limit是img标签的高度约束 w_limit是img标签的宽度约束

$h_limit = $_POST['h_limit'];
$w_limit = $_POST['w_limit'];

list($width, $height) = getimagesize($_POST['image_path']);
$w_mult = $width/$w_limit;
$h_mult = $height/$h_limit;

然后我可以做

imagecopyresampled($final, $image, 0, 0, $x1*$w_mult, $y1*$h_mult, $target_width, $target_height, $w*$w_mult, $h*$h_mult);
于 2012-06-15T04:54:54.937 回答
0

我不确定为什么显示大小不同,但你不能只跟踪浏览器中的显示大小(我不知道这是否在你的代码中得到修复,所以一些 javascript 和额外的表单字段可能是必要)然后,在 PHP 中,首先调整到该大小,然后裁剪

原始图像--->调整到用户在浏览器中看到的大小--->根据用户提供的坐标裁剪

于 2012-06-15T02:13:34.047 回答