2013-08-22 19 views
5

Görselimi kırpmak için jquery imgAreaSelect instanciete'ye aşağıdaki javascript kodunu kullanıyorum.Jquery imgAreaSelect kullanarak bir görüntü nasıl php ile kırpılır?

$(document).ready(function() { 
    $('#ladybug').imgAreaSelect({ 
     onSelectEnd: function (img, selection) { 
      $('input[name="x1"]').val(selection.x1); 
      $('input[name="y1"]').val(selection.y1); 
      $('input[name="x2"]').val(selection.x2); 
      $('input[name="y2"]').val(selection.y2);    
     } 
    }); 
}); 

Bu aşağıdaki (örnek) html kodu ile ilgilidir: Bu mükemmel çalışıyor

<div> 
    <img id="ladybug" src="ladybug.jpg" alt="" /> 
</div> 

<div> 
    <form action="#" method="post"> 
     <input id="x1" type="hidden" name="x1" value="" /> 
     <input id="y1" type="hidden" name="y1" value="" /> 
     <input id="x2" type="hidden" name="x2" value="" /> 
     <input id="y2" type="hidden" name="y2" value="" /> 
     <input type="submit" name="submit" value="Submit" /> 
    </form> 
</div> 

example imgAreaSelect

formu gönderilirken, ben php geri doğru bilgileri alıyorum. Ancak, şimdi görüntüyü sadece formun gönderdiği koordinatlarla değiştirmek için php kullanmalıyım. Ve bu daha zordu diye düşündüm.

$image_info = getimagesize($filename); 
$image = imagecreatefromjpeg($filename); 

$width = imagesx($image); 
$height = imagesy($image); 

$resized_width = ((int)$formData["x2"]) - ((int)$formData["x1"]); 
$resized_height = ((int)$formData["y2"]) - ((int)$formData["y1"]); 

$resized_image = imagecreatetruecolor($resized_width, $resized_height); 
imagecopyresampled($resized_image, $image, 0, 0, (int)$formData["x1"], (int)$formData["y1"], $resized_width , $resized_height, $width, $height); 
imagejpeg($resized_image, $filename); 

Yukarıdaki betik çalışır ancak koordinatları/genişlik/yüksekliği yanlış şekilde kullanır. ben her zaman resized görüntüde büyük bir siyah kenarlı arta kalan ediyorum:

example wrong cropped image

Can kimse bana doğru yönde kurdu?

cevap

6

aşağıdaki ile imagecopyresampled başlayan satırı değiştirilmesi yapmak gerekir:

imagecopyresampled($resized_image, $image, 0, 0, (int)$formData["x1"], (int)$formData["y1"], $width, $height, $width, $height);

imagecopyresampled() konumunda genişlik src_w ve yükseklik src_h ait src_image bir dikdörtgen alanı devam edecektir (src_x, src_y) ve yeri dst_w genişliğinde dst_image ve dst_h yüksekliğinde (dst_x, dst_y) dikdörtgen bir alanda.

İlgili konular