2012-06-15 288 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中,首先調整大小,然後裁剪

原始圖像--->調整大小,用戶看到瀏覽器--->基於用戶提供的裁剪座標