Hoy vamos a ver como recortar imágenes con Jcrop y PHPThumb. Jcrop es un plugin para jQuery que nos permite seleccionar de forma visual un área de una imagen y guardar las coordenadas seleccionadas en un formulario que enviaremos a un script PHP el cual recortará la imagen. Para hacer efectivo el recorte utilizaremos la librería para PHP PHPThumb que es muy sencilla de utilizar y funciona estupendamente.
El resultado final de este ejemplo será:
Antes de empezar tendrás que descargar Jcrop desde aquí o desde su web oficial y también tendrás que descargar PHPThumb desde aquí.
Veamos el código:
index.php
<?php //Indicamos las imágenes a utilizar y donde se vá a guardar $src = "imagenes/zf2.png"; $guardar_en="imagenes/imagen_resultante.png"; if(isset($_POST["w"])){ $targ_w = $_POST['w']; $targ_h = $_POST['h']; //Recortamos la imagen con las cordenas que nos pasa el formulario require_once 'PHPThumb/ThumbLib.inc.php'; $thumb = PhpThumbFactory::create($src); $thumb->crop($_POST['x'],$_POST['y'],$_POST['w'],$_POST['h']); $thumb->save($guardar_en); //Redirigimos a la página de la que proviene el formulario header("Location:".$_SERVER["HTTP_REFERER"]); } ?> <!DOCTYPE HTML> <html lang="es"> <head> <meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> <!--Incluimos jQuery y jCrop--> <script src="jcrop/js/jquery.min.js"></script> <script src="jcrop/js/jquery.Jcrop.js"></script> <link rel="stylesheet" href="jcrop/css/jquery.Jcrop.css" type="text/css" /> <title>Recortar imágenes con jCrop y PHPThumb</title> <script type="text/javascript"> //Utilizamos jCrop en los elementos con el id cropbox $(function(){ $('#cropbox').Jcrop({ aspectRatio: 0, onSelect: updateCoords }); }); function updateCoords(c) { $('#x').val(c.x); $('#y').val(c.y); $('#w').val(c.w); $('#h').val(c.h); }; function checkCoords() { if (parseInt($('#w').val())) return true; alert('Selecciona una región en la imágen'); return false; }; $(document).ready(function(){ //Mostrar alto y ancho en px del area seleccionada $("#target").mousemove(function(){ var ancho=$("#w").val(); var alto=$("#h").val(); $("#ancho_seleccionado").html(ancho); $("#alto_seleccionado").html(alto); }); }); </script> <style type="text/css"> #cropbox{ max-width:100%; } .imagen{ float:left; } .clear{ clear:both; } </style> </head> <body> <h3>Recortar imágen</h3> <div class="imagen" id="target"> <p>Original</p> <img src="<?=$src?>" id="cropbox" /> </div> <?php if(file_exists($guardar_en)){ ?> <div class="imagen"> <p>Recortada</p> <img src="<?=$guardar_en?>" /> </div> <br/> <?php } ?> <div class="clear"></div> <form action="" method="post" onsubmit="return checkCoords();"> <input type="hidden" id="x" name="x" /> <input type="hidden" id="y" name="y" /> <input type="hidden" id="w" name="w" /> <input type="hidden" id="h" name="h" /> <input type="submit" value="Recortar" class="btn btn-large btn-inverse" /> Ancho seleccionado:<span id="ancho_seleccionado">0</span> px | Alto seleccionado:<span id="alto_seleccionado">0</span> px | </form> </body> </html>