Acabo de hacer este para un amigo...no lo he probado, pero poniendo en el source de la imagen el nombre del archivo y pasandole ancho, alto, calidad e imagen deberia regenerarla con el tamaño pasado.
Ejemplo, si guaras el file como imagen.php, y tenes una imagen llamada pipo.jpg, entonces harias así:
<img src="imagen.php?imagen=pipo.jpg&ancho=100">
Código PHP:
<?
$maximoPx = 1000;
$imagen = isset($_GET["imagen"]) ? $_GET["imagen"] : '';
$ancho = isset($_GET["ancho"]) ? (intval($_GET["ancho"])<$maximoPx) ? intval($_GET["ancho"]) : 0 : 0;
$alto = isset($_GET["alto"]) ? (intval($_GET["alto"])<$maximoPx) ? intval($_GET["alto"]) : 0 : 0;
$calidad = isset($_GET["calidad"]) ? (intval($_GET["calidad"])<100) ? intval($_GET["calidad"]) : 60 : 60;
if(strlen($imagen)>5){
$extension = strtolower(substr(strrchr($imagen,"."),1));
$extensionJpg = array('jpg','jpeg');
$extensionGif = array('gif','png');
if(in_array($extension,$extensionJpg)):
$imgSource = imagecreatefromjpeg($imagen);
elseif(in_array($extension,$extensionGif)):
$imgSource = imagecreatefromgif($imagen);
else:
header("Location: $imagen");
exit;
endif;
$anchoOriginal = imagesx($imgSource);
$altoOriginal = imagesy($imgSource);
if($alto===0):
$alto = ($ancho / $anchoOriginal) * $altoOriginal;
if($alto===0):
$alto = 1;
endif;
endif;
if($ancho===0):
$ancho = ($alto / $altoOriginal) * $anchoOriginal;
if($ancho===0):
$ancho = 1;
endif;
endif;
#Para GD 2.0.1 o mayor
$imgDestino = imagecreatetruecolor($ancho,$alto);
imagecopyresampled($imgDestino, $imgSource, 0, 0, 0, 0, $ancho, $alto, $anchoOriginal, $altoOriginal);
#Para versiones anteriores a GD 2.0.1
#$imgDestino = imagecreate($ancho,$alto);
#imagecopyresized($imgDestino, $imgSource, 0, 0, 0, 0, $ancho, $alto, $anchoOriginal, $altoOriginal);
header("Content-type: image/jpeg");
imagejpeg($imgDestino,'', $calidad);
imagedestroy($imgSource);
imagedestroy($imgDestino);
}
?>
PD: Los parametros son opcionales, revisa el codigo;)