Hace un tiempo necesitaba recortar imágenes dinámicamente en PHP para guardarlas en el servidor modificadas. Después de buscar por la red encontré una librería que no está nada mal.
La librería en cuestión es CropCanvas, y podéis encontrarla aquí.
Un ejemplo bastante simple puede ser el siguiente
require_once(MOD_DIR."class.cropcanvas.php");
$sx = $sy = 1;
$ex = $ey = 100;
$cc =& new CropCanvas();
if ($cc->loadImage($imagenInicial))
{
$cc->cropToDimensions($sx, $sy, $ex, $ey);
$cc->saveImage('images/miImagenFinal.jpg');
}
else
{
die("Error");
}
Este ejemplo simplemente coge una imagen, y la recorta desde la posición (1,1) hasta la posición (100,100). Así de simple.
Hola: Estube investigando sobre el tema, porque tambien estoy desarrollando algo parecido, me gustaria saber si da para usar cropcanvas pero con la opcion de una ves recortada la imagen, pueda almacenar en una base de datos mysql.
gracias
Buenas,
la verdad es que nunca he guardado una imagen en Base de Datos, creo que es más optimo guardarla en disco, y en base de datos simplemente guardas la referencia a la misma, de esta forma descargas un poco la base de datos y así optimizas su funcionamiento.
Creo que podrías llegar a hacerlo mediante el siguiente método de la clase:
$cc->showImage('png')
Esta función escupe por pantalla la imagen, si lo combinas con funciones de control de salida de la siguiente forma….
ob_start()
$cc->showImage('png')
$myImg = ob_get_contents()
Creo que ya tienes la imagen en una variable, y por tanto la puedes guardar en BD.
Espero que te funcione, si tienes alguna duda hazmelo saber
Cuentame algo…. con esta clase logras reducir el peso de la imagen?… tengo un gran problema tengo un archivo que redimensiona mis imagenes…pero cuando el archivo pesa mas de 3 MB…no la redimensiona…solo estoy buscando bajar el peso de la imagen mediante un scrip PHP para baja el peso a menos de 1 MB.. es posible?
En principio yo lo he utilizado para reducir las dimensiones de la imagen, y claro obviamente te reduce las dimensiones, de todos modos como puede ser que no te baje el peso de la imagen si pesa más de 3 MB? Puede que el formulario te esté limitando el envío de ficheros de mas de ese tamaño, o que en la configuración de PHP no te permita trabajar con ficheros tan grandes…
Tal como utilizo yo la clase me suben imagenes de cualquier tamaño, y las redimensiono a 800×600 y reduce el peso de una forma bestial.
Ya me contarás…
Hola, como estas?
Me parecio bastante interesante la librería.
Me podrías ayudar en lo siguiente?
Necesito crear un formulario que le permita al usuario cargar una imagen, luego automaticamente ésta se recorta de un tamaño 150×200 (la idea es que conserve la escala de la imagen y no solo recorte desde la posicion 1,1) y finalmente sea almacenada en el servidor y la ubicacion en una base de datos con un nombre asignado aleatoriamente (de preferencia un numero).
saludos, es bastante interesante tu sitio. suerte
Por lo que entiendo no necesitas hacer un recorte de la imagen, sino hacer la imagen más pequeña pero que mantenga la escala. Eso puedes hacerlo con la librería GD de PHP. Si tienes paciencia intento montarte una entrada los próximos días explicando un poco el tema, sino puedes buscar en google “PHP aspectratio” y ver que es lo que puedes llegar a hacer con la librería GD.
Saludos y gracias.
Agradesco tu respuesta inmediata. Si puedes ayudarme en el tema te lo agradecería enormemente. Es bastante interesante tu sitio.
Saludos y estamos en contacto.
Hola estoy un poco perdido! Lo que yo necesito es que de una imagen (parte meteorologico de toda europa) recortar una pequeña parte (la zona de España) Ya he conseguido cargar la imagen del parte sola. Mi pregunta es, como hago para que me recorte una parte de la imagen…? Gracias de antemano
Pues como dice el ejemplo deberías pasarle a la función cropToDimensions($sx, $sy, $ex, $ey), los parametros desde la posición que quieras (x, y) hasta la posición (x2, y2) que quieras lo que te generaría un cuadrado, solo tienes que ajustar ese cuadro para que coincida con el trozo de españa.
Espero que te sirva, un saludo!
Good content has a great following of readers,
seems you have that!