Inicio  |  Noticias  |  Foro  |  Blogs  |  Galerías  |  Eventos  |  Reportajes 
    Ca l'Avi Blogs
Hola Visitante   Registrate   Logueate 

Como disminuir el peso de las imágenes con PHP
oscar - 29-10-2009

En esta entrada explicaré como reducir el peso de la imágen, por ejemplo, si se sube una imágen de 2MB y se ha de mostrar con una resolución de 150x100 pixels, para no cargar toda la imagen, usaremos un script para reducir el tamaño de la imagen sin perder calidad.

Esto es muy eficiente ya que al rebajar el peso de una imágen de 2MB (por ejemplo) a 100 KB ahorramos en:
  • Tiempo: no es lo mismo cargar una galería de 20 imágenes de 2MB (40MB) que una de 20 imágenes de 150KB (3MB).
  • Transferencia de datos: normalmente "casi" todos los hostings tienen límite de línea, si te pasas de más de 5GB al mes (por decir algo) has de pagar un extra por GB o te cortan la línea hasta el mes siguiente. Por ejemplo, si transfieres 200MB de datos al día, al final del mes tendrías 6GB aocumulados, pero si reducimos las imágenes, quizá no lleguemos ni a los 2GB.
Para cargar una imágen reducida, la llamada se hace con el tag <img> de toda la vida, pero en el "src" ha de ponerse el script que comprima la imagen y pasarle por parámetros la ruta de la imagen, el ancho y la altura.

<img src="scripts/thumbnails.php?ruta=directorio/foto.jpg&ancho=220&alto=165" />

Y como sería el script?

 <?php
$new_width = $_GET["ancho"];
$new_height = $_GET["alto"];
$ruta = $_GET["ruta"];

if(preg_match("/.jpg/i", "$
ruta"))
{
    $format = ´image/jpeg´;
}
if (preg_match("/.gif/i", "$
ruta"))
{
    $format = ´image/gif´;
}
if(preg_match("/.png/i", "$
ruta"))
{
    $format = ´image/png´;
}
switch($format)
{
    case ´image/jpeg´:
        $fuente = imagecreatefromjpeg($
ruta);
        break;
    case ´image/gif´;
        $fuente = imagecreatefromgif($
ruta);
        break;
    case ´image/png´:
        $fuente = imagecreatefrompng($
ruta);
        break;
}

$imagen = imagecreatetruecolor($new_width , $new_height);
imagealphablending($imagen, false);
// redimensiona
imagecopyresampled($ruta, $fuente, 0, 0, 0, 0, $new_width, $new_height, imagesx($fuente),imagesy($fuente));

switch($format)
{
    case ´image/jpeg´:
        imagejpeg($
ruta);
        break;
    case ´image/gif´;
        imagegif($
ruta);
        break;
    case ´image/png´:
        imagepng($
ruta);
        break;
}
?>

El problema de este script, es que aunque reduzcas la imágen de peso considerablemente, a la hora de cargar ua galería de imágenes, el procesado se hace esterno, no es lo mismo cargar directamente una imágen de 50KB que convertir una imagen de 3MB a 50KB y luego mostrarla. Este inconveniente me hace considerar el intentar reducir el peso de las imágenes mientras se van subiendo y así mejorar la velocidad de carga.


 Comentarios


02-10-2014 Notificar Abuso
04-10-2014 Notificar Abuso
12-10-2014 Notificar Abuso
13-10-2014 Notificar Abuso
16-05-2016 Notificar Abuso
16-05-2016 Notificar Abuso
08-08-2016 Notificar Abuso
14-08-2016 Notificar Abuso
24-09-2016 Notificar Abuso

Para poder comentar has de estar logado en Ca l'Avi


Artículos anteriores

Redondear decimales, hacia arriba y hacia abajo en PHP
Como crear URLs amigables con PHP
Como disminuir el peso de las imágenes con PHP (Parte 2)
Como disminuir el peso de las imágenes con PHP
Como subir múltiples ficheros

 Ver todos 



Resolución mínima de 1024x768© - Portal desarrollado por Softilus para Calavi.net - Copyright 2009, todos los derechos reservados