En el
post anterior comentaba que el procesado de imágenes hacía que la web fuera excesivamente lenta, por ejemplo con una linea fibra de 8MB, la web me tardaba entre
20 y 24 segundos en cargarse,
sobre todo al hacer el thumbnail de las imágenes.
Imaginados convertir 20 imágenes de más de 1MB a thumbnails pequeños de menor peso varias veces al día, anque el tráfico es menor, el consumo de tiempo y sobre todo de CPU, puede hacer que el visitante de canse de la lentitud de la página, o que el proveedor de hosting te cierre la página por consumo de CPU.
Para aligerar la conversión me planteé el caso de que si una imágen de 2048x1536 pixels, ¿porqué no la convertía durante el upload creando los thumbnails que me hicieran falta? así reduzco el peso de la imagen, el tamaño y al crear el thumbnail de una imágen pequeña me tarda menos.
Así que modifiqué el código del script
up.php para subir imágenes que usaba en el
post de como subir múltiples archivos, solo pondré el añadido que le hago:
//creamos thumbnail
$ext = array ("jpg","png","gif");
$optimizar = 90; // VALOR DE OPTIMIZACION
$nombre_archivo = $filename;
$altura_nueva = 450;
$foto = "/galeria/" . $galeria . "/" . $_FILES[´Filedata´][´name´];
$extensiones = substr($foto, -4);
$archivosinext = substr($foto, 0, -4);
$archivo = pathinfo($foto);
if (in_array(strtolower($archivo[´extension´]),$ext))
{
if(strtolower($archivo[´extension´])=="gif"){
$img = imagecreatefromgif($foto);
}else if(strtolower($archivo[´extension´])=="jpg"){
$img = imagecreatefromjpeg($foto);
}else if(strtolower($archivo[´extension´])=="png"){
$img = imagecreatefrompng($foto);
}
$ancho = imagesx($img);
$altura = imagesy($img);
$ancho_nuevo = floor($ancho*($altura_nueva/$altura));
$tmp_img = imagecreatetruecolor($ancho_nuevo,$altura_nueva);
imagecopyresized($tmp_img,$img,0,0,0,0,$ancho_nuevo,$altura_nueva,$ancho,$altura);
if(strtolower($archivo[´extension´])=="gif"){
imagegif( $tmp_img,$archivosinext . "_thumb" . $extensiones);
}else if(strtolower($archivo[´extension´])=="jpg"){
imagejpeg( $tmp_img,$archivosinext . "_thumb" . $extensiones,$optimizar);
}else if(strtolower($archivo[´extension´])=="png"){
imagepng( $tmp_img,$archivosinext . "_thumb" . $extensiones);
}
} |
Este añadido lo que viene hacer, a parte de subir la imágen con el tamaño original, es crear un thumbnail de 450px de altura (el ancho lo calculamos en relación con el ancho y alto original), posteriormente creamos la misma imágen pero le ponemos la marca _thumb, quedando por ejemplo DSCN_0234_thumb.JPG pero ya con un peso y resolución más optimizado.
Finalmente, se hace la llamada al thumbnail:
<img src="scripts/thumbnails.php?ruta=directorio/foto.jpg&ancho=220&alto=165" />
Y los resultados son notables:
Hemos pasado de una media de 22 segundos a 3.6 segundos.