Esta función permite:
imagen_dimensionar($archivo_origen, $archivo_destino, $ancho_maximo, $alto_maximo);
La función devuelve un string con la extensión del archivo final, que es utilizada en caso de que no se haya especificado ninguno en $archivo_destino.
function imagen_dimensionar($origen, $destino, $ancho_limite=2000, $alto_limite=2000)
{
//creamos carpeta de destino
$temp = explode('/', $destino);
$temp[count($temp)-1] = '';
$carpeta_destino = implode('/', $temp);
@mkdir($carpeta_destino);
//respeta el ancho y el alto
list($ancho_orig, $alto_orig, $tipo, $atr) = getimagesize($origen);
//para que no agrande la imagen
if ($ancho_orig < $ancho_limite) $ancho_limite = $ancho_orig;
if ($alto_orig < $alto_limite) $alto_limite = $alto_orig;
$alto_limite_probable = $alto_orig * $ancho_limite / $ancho_orig;
if ($alto_limite_probable > $alto_limite)
{
$ancho_limite = $ancho_orig * $alto_limite / $alto_orig;
}
else
{
$alto_limite = $alto_limite_probable;
}
return imagen($origen, $destino, $ancho_limite, $alto_limite);
}
function imagen($origen, $destino, $ancho, $alto)
{
$calidad = 90;
$size = getimagesize($origen); //Tomamos la dimension de la imagen
$extensiones = array('', 'gif', 'jpg', 'png');
//obtenemos si el sistema desea obligar a un formato de salida
$ext = strtolower(substr($destino, strlen($destino)-4));
switch ($ext)
{
case '.gif':
$salida_formato = 1;
break;
case '.jpg':
$salida_formato = 2;
break;
case 'jpeg':
$salida_formato = 2;
break;
case '.png':
$salida_formato = 3;
break;
default:
$salida_formato = $size[2];
$destino = $destino.'.'.$extensiones[$salida_formato];
}
$width = $size[0];
$height = $size[1];
$ratio = $width/$ancho;
$aux_height = $height/$ratio;
//tomamos el tipo
if($size[2]==1){$src = @imagecreatefromgif($origen);}
if($size[2]==2){$src = @imagecreatefromjpeg($origen);}
if($size[2]==3){$src = @imagecreatefrompng($origen);}
if (!$src)
{
return -1;
}
else
{
//Creamos una imagen a color real temporal donde copiamos el original
$aux = imagecreatetruecolor($ancho, $aux_height);
//Creamos una imagen a color real el cual será el soporte final del resultado
$dst = imagecreatetruecolor($ancho, $alto);
//Copiamos el contenido de la imagen original a la nueva
imagecopyresampled($aux, $src, 0, 0, 0, 0, $ancho, $aux_height, $width, $height);
//Pegamos la imagen copiada
imagecopy($dst, $aux, 0, 0, 0, ($aux_height-$alto)/2, $ancho, $alto);
imagedestroy($aux);
if($salida_formato==1){ imagegif($dst, $destino);}
if($salida_formato==2){ imagejpeg($dst, $destino, $calidad);}
if($salida_formato==3){ imagepng($dst, $destino);}
imagedestroy($src);
imagedestroy($dst);
return $extensiones[$salida_formato];
}
}