15 49.0138 8.38624 1 0 4000 1 https://www.alexmedina.net 300 true 0

Redimensionar múltiples imágenes de un directorio en PHP

2 Comments

La necesidad surge de un cliente al que la web le iba lenta. Era porque disponía de archivo muy pesados y la carga estaba complicando la navegabilidad de la web.

Con este pequeño script en php se recorre los archivos del directorio, detecta si son de tamaño grande y si es así se redimensiona, en este caso a 600 x 400px.

<? 
# establecer limite de tiempo máx ejecutandose
set_time_limit(200);
## CONFIGURACION #############################

 $ancho_nuevo=600; 
 $alto_nuevo=400; 
 
 # directorio
 $path="/directorio/articulos";
 $path2="/directorio2/articulos2";
 
## FIN CONFIGURACION ############################# 

$directorio=dir($path);
$items = 0; 
 
echo "Directorio ".$path.":<br><br>";
 
while ($archivo = $directorio->read())
{
 if($archivo != "." && $archivo != "..")
 {
 $ruta1 = $path.'/'.$archivo;
 $ruta2 = $path2.'/'.$archivo;
 $ancho = $ancho_nuevo;
 $alto =$alto_nuevo;
 
 $datos=getimagesize ($ruta1); 
 
 $ancho_orig = $datos[0]; # Anchura de la imagen original 
 $alto_orig = $datos[1]; # Altura de la imagen original 
 $tipo = $datos[2]; 
 
 
 //echo "<br>Ancho nuevo: " . $ancho;
 //echo "<br>Ancho orig: " . $ancho_orig;
 //echo "<br>Alto nuevo: " . $alto;
 //echo "<br>Alto orig: " . $alto_orig;
 
 if($ancho < $ancho_orig || $alto < $alto_orig)
 {
 echo "<br>Archivo: " .$ruta1;
 echo "<br>Archivo destina: " .$ruta2;
 
 
 if ($tipo==1){ # GIF 
 if (function_exists("imagecreatefromgif")) 
 $img = imagecreatefromgif($ruta1); 
 else 
 echo "No function GIF"; 
 } 
 else if ($tipo==2){ # JPG 
 if (function_exists("imagecreatefromjpeg")) 
 $img = imagecreatefromjpeg($ruta1); 
 else 
 echo "No function JPG"; 
 } 
 else if ($tipo==3){ # PNG 
 if (function_exists("imagecreatefrompng")) 
 $img = imagecreatefrompng($ruta1); 
 else 
 echo "No function PNG"; 
 } 
 
 # Se calculan las nuevas dimensiones de la imagen 
 if ($ancho_orig>$alto_orig) 
 { 
 $ancho_dest=$ancho; 
 $alto_dest=($ancho_dest/$ancho_orig)*$alto_orig; 
 } 
 else 
 { 
 $alto_dest=$alto; 
 $ancho_dest=($alto_dest/$alto_orig)*$ancho_orig; 
 }
 
// imagecreatetruecolor, solo estan en G.D. 2.0.1 con PHP 4.0.6+ 
$img2=@imagecreatetruecolor($ancho_dest,$alto_dest) or $img2=imagecreate($ancho_dest,$alto_dest);
 
// Redimensionar 
// imagecopyresampled, solo estan en G.D. 2.0.1 con PHP 4.0.6+ 
@imagecopyresampled($img2,$img,0,0,0,0,$ancho_dest,$alto_dest,$ancho_orig,$alto_orig) or imagecopyresized($img2,$img,0,0,0,0,$ancho_dest,$alto_dest,$ancho_orig,$alto_orig);
 
// Crear fichero nuevo, según extensión. 
 if ($tipo==1) // GIF 
 if (function_exists("imagegif")) 
 imagegif($img2, $ruta2); 
 else 
 echo "No GIF";
if ($tipo==2) // JPG 
 if (function_exists("imagejpeg")) 
 imagejpeg($img2, $ruta2); 
 else 
 echo "No JPG";
if ($tipo==3) // PNG 
 if (function_exists("imagepng")) 
 imagepng($img2, $ruta2); 
 else 
 echo "No PNG¡"; 
 }
 
 unlink($ruta1);
 $items ++;
 } 
}
echo "<br>Total items: ". $items;
$directorio->close();
?>
Previous Post
Evitar listado de archivos en un directorio del servidor Apache
Next Post
El método ‘System.String ToShortDateString()’ no admite la conversión a SQL

2 Comments

  • 25 septiembre, 2013 at 8:30 pm
    Dani R

    Excelente, lo único que le falta es adaptarlo para q guarde la transparencia de los .png, yo ya lo hice.

    Reply
    • 26 septiembre, 2013 at 10:38 am
      admin

      Gracias Dani por tu comentario. ¿Como hiciste lo de la transparencia de los .png?

      Reply

Leave a Reply

SOBRE MÍ

Afortunado de trabajar en lo que me gusta, aprendiendo cada día cosas nuevas y ayudando a crear proyectos.
Conocimientos en diversas tecnologías y experiencia demostrable.
¿Nos ponemos manos a la obra?

Mis Apuntes