reducir todas las imagenes de un directorio a la mitad si son mayores de 999px

si tenemos un directorio que contiene imágenes y queremos reducir su tamaño, podemos utilizar un script desde un cron que recorre todas las imágenes, comprueba su tamaño y si es mayor del esperado lo reduce a la mitad

<?php



function createthumb($name,$filename,$new_w,$new_h){
	$system=explode('.',$name);
	$numparam=count($system);
	$tipo="";
	if (preg_match('/jpg|jpeg/',$system[$numparam-1])){
		$src_img=imagecreatefromjpeg($name);
		$tipo="jpg";
	}
	if (preg_match('/png/',$system[$numparam-1])){
		$src_img=imagecreatefrompng($name);
		$tipo="png";
	}
	if ($tipo!=""){
		$old_x=imageSX($src_img);
		$old_y=imageSY($src_img);
		if ($old_x > $old_y) {
			$thumb_w=$new_w;
			$thumb_h=$old_y*($new_h/$old_x);
		}
		if ($old_x < $old_y) {
			$thumb_w=$old_x*($new_w/$old_y);
			$thumb_h=$new_h;
		}
		if ($old_x == $old_y) {
			$thumb_w=$new_w;
			$thumb_h=$new_h;
		}
		$dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
			
		if ($tipo=="png")
		{
			imagealphablending($dst_img, false);
			imagesavealpha($dst_img, true);
			imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); 
			imagepng($dst_img,$filename); 
		} else {
			imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); 
			imagejpeg($dst_img,$filename); 
		}
		imagedestroy($dst_img); 
		imagedestroy($src_img); 
		return $filename;
	}else{
		return null;
	}
}



$directorio = '.';
$ficheros1  = scandir($directorio);

$imagenes=0;
$contador=0;
foreach ($ficheros1 as $key => $value){
      if (!in_array($value,array(".",".."))){
         if (is_dir($directorio . DIRECTORY_SEPARATOR . $value)){
           //no hacer nada
         }else{
            $imagenes++;
            $gis=@getimagesize($value);
            list($width, $height, $type, $attr) = $gis;
            
            if ($width>=1000 || $height>=1000){
                print_r($value);
                echo " ".$width."x".$height;
               echo " hay que redimensionar";
               $filename="".$value;
               $new_w=(int)($width/2);
               $new_h=(int)($height/2);
               createthumb($value,$filename,$new_w,$new_h);
               $contador++;
               echo "
"; } // esto solo si hay problemas de timeout //if ($contador==500){break;} } } } echo "Se han convertido $contador de $imagenes imagenes"; ?>

Se podria mejorar buscando imagenes en lugar de recorrer todos los archivos, pero queda para otro momento

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

* Please enter the Biggest Number