Estoy haciendo un pequeño sistema en el que el usuario puede agregar sus servicios a su página web, y a cada uno le puede asignar una imagen.
Lo que necesito hacer, es que al subir las imágenes éstas se redimensionen 2 veces (miniatura y foto grande) a cierto ancho, pero que a su vez se recorte una porción de imágen del centro con un alto determinado.
Dejo unos gráficos para ver si se me entiende mejor.
La imagen es grande, asi que les dejo el link:
http://estudiopronet.com/clientes/gr...ento_fotos.jpg
Actualmente tengo un código que me sirve para redimensionar imágenes, pero con respecto al alto, y no al ancho.. y no le puedo encontrar la vuelta para que funcione como quiero. Además no puedo recortarlas al medio. Les dejo el código que tengo:
Código PHP:
<?php
if(isset($_POST['guardar'])){
$nombre = $_POST['nombre'];
$descripcion = $_POST['descripcion'];
$texto = addslashes($_POST['texto']);
$tmpName = $_FILES['imagen']['tmp_name'];
$fileType = $_FILES['imagen']['type'];
$fileSize = $_FILES['imagen']['size'];
# Ancho del thumbnail en pixeles
define("ANCHO_THUMB", 370);
# Altura del thumbnail en píxeles
define("ALTURA_THUMB", 150);
# Ancho de la foto en píxeles
define("ANCHO_FOTO", 780);
# Altura de la foto en píxeles
define("ALTURA_FOTO", 250);
# Nombre temporal de las thumbnails
define("TEMP_THUMB", "thumb");
# Nombre temporal de las fotos
define("TEMP_FOTO", "foto");
// Mime types permitidos
$mimetypes = array("image/jpeg", "image/pjpeg", "image/gif", "image/png");
//Guardo las fotos y las thumbnails en la BD
// Verificamos si el archivo es una imagen válida
if(!in_array($fileType, $mimetypes)){
$message = "El archivo que subiste no es una imagen válida";
return $message;
}
switch($fileType){
case $mimetypes[0]:
case $mimetypes[1]:
$img = imagecreatefromjpeg($tmpName);
break;
case $mimetypes[2]:
$img = imagecreatefromgif($tmpName);
break;
case $mimetypes[3]:
$img = imagecreatefrompng($tmpName);
break;
}
// Tomo los datos de ancho y alto de la foto para redimensionarla
$datos = getimagesize($tmpName);
// Redimensionar el thumb
$ratio = ($datos[1]/ALTURA_THUMB);
$ancho = round($datos[0]/$ratio);
$thumb = imagecreatetruecolor($ancho, ALTURA_THUMB);
imagecopyresized($thumb, $img, 0, 0, 0, 0, $ancho, ALTURA_THUMB, $datos[0], $datos[1]);
switch($fileType) {
case $mimetypes[0]:
case $mimetypes[1]:
imagejpeg($thumb, TEMP_THUMB);
break;
case $mimetypes[2]:
imagegif($thumb, TEMP_THUMB);
break;
case $mimetypes[3]:
imagepng($thumb, TEMP_THUMB);
break;
}
// Redimensionar la foto
$ratioFoto = ($datos[1]/ALTURA_FOTO);
$anchoFoto = round($datos[0]/$ratioFoto);
$foto = imagecreatetruecolor($anchoFoto, ALTURA_FOTO);
imagecopyresized($foto, $img, 0, 0, 0, 0, $anchoFoto, ALTURA_FOTO, $datos[0], $datos[1]);
switch($fileType) {
case $mimetypes[0]:
case $mimetypes[1]:
imagejpeg($foto, TEMP_FOTO);
break;
case $mimetypes[2]:
imagegif($foto, TEMP_FOTO);
break;
case $mimetypes[3]:
imagepng($foto, TEMP_FOTO);
break;
}
// Extrae los contenidos de las fotos
# contenido de la foto original
$fp = fopen(TEMP_FOTO, "rb");
$tfoto = fread($fp, filesize(TEMP_FOTO));
$tfoto = addslashes($tfoto);
fclose($fp);
# contenido del thumbnail
$fp = fopen(TEMP_THUMB, "rb");
$tthumb = fread($fp, filesize(TEMP_THUMB));
$tthumb = addslashes($tthumb);
fclose($fp);
// Borra archivos temporales si es que existen
@unlink($tmpName);
@unlink(TEMP_THUMB);
@unlink(TEMP_FOTO);
include('incluir/config.php');
$cons = mysql_query("INSERT INTO servicios (nombre, descripcion, texto, thumb, foto, type) VALUES ('$nombre', '$descripcion', '$texto', '$tthumb', '$tfoto', '$fileType');", $link) or die('Error MySQL: '.mysql_error($link));
if(!$cons){
$message = 'Ha ocurrido un error guardando las imagenes. Revise las configuraciones o contacte al administrador.';
die ($message);
} else {
$message = 'Fotos guardadas con éxito en la base de datos';
die ($message);
}
}
?>
Espero que alguien entienda lo que necesito y me pueda dar una manito.
Desde ya muchisimas gracias!!