¿A qué te referís con "desconfiguradas"? Si es a que se deforman las dimensiones es esperable, ya que estás asignándole un ancho y un alto predeterminado (600x450) a una imagen que puede ser de 1000x250px.
Si es necesario que las nuevas imágenes tengan esas dimensiones, deberías cortarla para que se ajuste sin deformarse. Por ejemplo: comprobar si la imagen a 450px de alto sobrepasa el ancho permitido (600px) y entonces cortarla a ese ancho.
Si no es necesario que el tamaño sea exacto, lo mejor es definir una de las dos simensiones como constante (por ejemplo: todas tendrán 600px de ancho) y establecer un alto relativo con una regla de tres:
Código PHP:
Ver original$yNuevo = ($xNuevo*$yOriginal)/$xOriginal;
Este script lo armé hace tiempo de manera genérica para redimensionar imágenes. Permite redomensiones, establecer anchos y altos fijos y recortes tanto para JPGs, GIFs y PNGs (estos dos últimos con un parámetro para mantener una capa como transparente):
Código PHP:
Ver original<?php
// Funciones para limpiar caracteres latinos
require_once('../fns/str.php');
// Si no pasé el tipo de la imagen como parámetro, establece que es JPG
$tipo = 'jpg';
$tipo = $_GET['t'];
}
$ruta = trim($_GET['f']); // Se fija si el archivo que le pasé tiene incluida la extensión... si no la tiene, se la agrega
$ruta .= '.'.$tipo;
}
$maxSize = 0;
$alpha = 0;
// Parámetro para establecer si tengo dimensiones "obligatorias" como en tu script
if (isset($_GET['r']) and
($_GET['r'] == 1)){ $maxSize = 1;
}
// Transparencia
if (isset($_GET['alpha']) and
((strlen($_GET['alpha']) == 3) or
(strlen($_GET['alpha']) == 3))){ $alpha = HexToRGB($_GET['alpha']);
}
switch ($tipo){
case 'jpg':
break;
case 'png':
break;
case 'gif':
break;
}
// Si paso ancho y alto...
if (isset($_GET['w']) and
isset($_GET['h']) and
($_GET['w'] <> '') and
($_GET['h'] <> '')){ $ancho = $_GET['w'];
$alto = $_GET['h'];
// Si paso sólo el ancho...
} elseif (isset($_GET['w']) and
($_GET['w'] <> '')){ $ancho = $_GET['w'];
$alto = ($ancho*$imgalto)/$imgancho;
// Si paso sólo el alto...
} elseif (isset($_GET['h']) and
($_GET['h'] <> '')){ $alto = $_GET['h'];
$ancho = ($alto*$imgancho)/$imgalto;
} else {
// Si no pasé ni ancho ni alto como parámetro, crea la imagen en 50x50px
$ancho = 50;
$alto = 50;
}
if ($maxSize == 1){
if (($ancho > $imgancho) or ($alto > $imgalto)){
$ancho = $imgancho;
$alto = ($ancho*$imgalto)/$imgancho;
}
}
if (isset($_GET['recortar']) and
($_GET['recortar'] == 1)){ $imgalto = $alto;
}
}
switch ($tipo){
case 'jpg':
header("Content-type: image/jpeg"); break;
case 'png':
header("Content-type: image/png"); break;
case 'gif':
header("Content-type: image/gif"); break;
}
?>
Espero que te ayude. Si alguien ve este script y sugiere mejoras, son bienvenidas.
Saludos,
Pablo