2012-06-15 227 views
0

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

在后端我会等待上一页的坐标。我会得到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); 

回答

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

我不知道为什么显示尺寸不同,但不能你刚才跟踪的内容的显示尺寸在浏览器(我不知道这是否是固定在你的代码或不是所以一些JavaScript和额外的表单域可能是必要的),然后,在PHP中,首先调整大小,然后裁剪

原始图像--->调整大小,用户看到浏览器--->基于用户提供的裁剪坐标