2013-08-22 11 views
5

sto usando il seguente codice javascript per instanciete jquery imgAreaSelect per ritagliare la mia immagine.Come ritagliare un'immagine con php usando jquery imgAreaSelect?

$(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);    
     } 
    }); 
}); 

Ciò si riferisce al codice HTML seguente (esempio):

<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

Questo funziona perfettamente, sto ottenendo tutte le informazioni di destra di nuovo php quando inviare il modulo. Tuttavia, ora devo usare php per modificare l'immagine con le coordinate che il modulo invia appena. E questo è stato più difficile allora pensavo.

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

Lo script precedente funziona ma utilizza le coordinate/larghezza/altezza nel modo sbagliato. Sono sempre andato oltre con un grande bordo nero nell'immagine ridimensionata:

example wrong cropped image

Qualcuno mi può impostare nella giusta direzione?

risposta

6

Sostituzione della linea che inizia con imagecopyresampled con il seguente dovrebbe fare:

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

imagecopyresampled() avrà un'area rettangolare da src_image di src_w larghezza ed altezza src_h alla posizione (src_x, src_y) e posto in un'area rettangolare di dst_image di width dst_w e height dst_h in posizione (dst_x, dst_y).