PicHandler es el nombre que le he colocado a este script.
¿Qué hace? pues en pocas palabras cambia el tamaño de una imágen al vuelo. A veces necesitamos modificar el tamaño de alguna imágen de forma “instantánea” entonces es ahí donde podemos utilizar este script, por ejemplo cuando usamos “avatares” para un sistem de usuarios bastaría sólo con colocar <img src="pic.php?img=imagen.jpg&cwidth=128" /> y esto nos devolvería una imágen con un ancho de 128px y su altura proporcional al ancho.
Soporta las siguientes extensiones de imágenes: JPG,PNG y GIF (Ustedes pueden agregarle soporte para bmp)
Parametros (Todos se pasan através de GET):
- img
URL de la imágen a manipular en cuestión. Obligatorio - cwidth
Tamaño del ancho deseado en pixeles. Opcional si se declara cheight - cheight
Tamaño de la altura deseada en pixeles. Opcional si se declara cwidth - cqlty
Calidad de la imágen desde 0 (baja) hasta 100 (alta). Opcional por defecto es 80 - cut
Parametro para hacer una imágen cuadrada, no importando la altura. Opcional, para usarse debe estar seteado cwidth, si cwidth tiene un valor de 90 la imágen será de 90x90px
Modo de uso:
- Declarando un ancho fijo:
pic.php?img=imagen.jpg&cwidth=128 - Declarando un alto fijo:
pic.php?img=imagen.jpg&cheight=250 - Declarando un alto y ancho fijo:
pic.php?img=imagen.jpg&cwidth=250&cheight=370 - Asignando calidad a la imágen:
pic.php?img=imagen.jpg&cwidth=300&cqlty=100 - Convirtiendo una imágen cuadrada:
pic.php?img=imagen.jpg&cwidth=300&cut
Algunos me preguntan ¿Por qué script? pues para poder utilizarlo a cualquier hora sin necesidad de declarar una clase a una variable o crear otro php para difnirlo, etc. el código está “un” tanto optimizado para que utilice pocos recursos, espero que les pueda servir cómo me sirve a mi, cualquier duda, comentario, aclaración, sugerencia siempre es bien recibida.
Si desean pueden probar el código acá: Demo
Sin más preambulos el código:
<?
$image = getimagesize($_GET['img']);
$qlty = $_GET['cqlty'] && $_GET['cqlty'] <= 100 ? $_GET['cqlty'] : 80;
if ($image === false) die;
$mime = explode('/', $image['mime']);
$ext = $mime[1];
switch($ext){
case('jpg'): case('jpeg'):
$buffer = ImageCreateFromJPEG($_GET['img']);
break;
case('png'):
$buffer = ImageCreateFromPNG($_GET['img']);
$qlty = ($qlty * 0.1 == 10) ? 9 : ceil($qlty * 0.1);
break;
case('gif'):
$buffer = ImageCreateFromGIF($_GET['img']);
break;
default:
return false;
break;
}
$width = $image[0];
$height = $image[1];
if($_GET['cwidth']){
$new_width = $_GET['cwidth'];
$new_height = !$_GET['cheight'] ? $height * ($new_width/$width) : $_GET['cheight'];
}
if($_GET['cheight']){
$new_height = $_GET['cheight'];
$new_width = !$_GET['cwidth'] ? $width * ($new_height/$height) : $_GET['cwidth'];
}
if($_GET['cheight'] || $_GET['cwidth']){
$image_resized = isset($_GET['cut']) ? imagecreatetruecolor($_GET['cwidth'], ($new_height < $_GET['cwidth'] ? $new_height : $_GET['cwidth'])) : imagecreatetruecolor($new_width, $new_height);
imagealphablending($image_resized, false);
imagecopyresampled($image_resized, $buffer, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
//ImageAlphaBlending($image_resized, true);
imageSaveAlpha($image_resized, true);
$function = 'image'.$ext;
header('Content-type: '.$image['mime']);
if($ext == 'gif') $function($image_resized);
else $function($image_resized, null, $qlty);
ImageDestroy($buffer);
ImageDestroy($image_resized);
}
?>
