Möglichkeit bei scandir thumbnails zu erzeugen

rernanded

Erfahrenes Mitglied
Hallo
gibt es eine Möglichkeit beim Zugriff auf sämtliche Bilddateien (nur gif jpg png) in einem Ordner (zB mit scandir) die Bilder in Thumbnails (komprimiert, geringere KB) "direkt" umzuwandeln um diese anzeigen zu lassen? Spart das Ladezeit/Traffic ?
MONI
 
Selbstverständlich ist das möglich, man findet dazu auch Anleitungen, z. B. diese:
Thumbnails erstellen mit PHP
Und es spart Ladezeit weil ein Thumbnail i. allg. von den Abmessungen her viel kleiner ist als das volle Bild und entspr. auch die Größe der Datei, auch bei gleichem Komprimierungsfaktor wenn beides JPG ist.
 
Gleich vorne weg: Dieses Script ist eines der ersten PHP-Scripte, die ich geschrieben habe, auch der HTML-Code war mir wurscht. Aber trotz all der Jahre funktioniert es immer noch und ich nutze es auch noch regelmäßig. Nur zum Verschönern habe ich keine Lust :D:D:D:p
PHP:
<html>
<head>
<title>Image-Resizer</title>
</head>
<body>
<?php
   if ( ! isset($_POST["submit"]))
   {
?>
      <div align='center'>
        <center>
      <form action='<?php echo $_SERVER["SCRIPT_NAME"]; ?>' method='POST'>
      <table border='0' width='50%'>
        <tr>
          <td width='16%'></td>
          <td width='84%'><font size='5'><b>Image-Resizer</b></font></td>
        </tr>
        <tr>
          <td width='16%' height='20'>&nbsp;</td>
          <td width='84%' height='20'>&nbsp;</td>
        </tr>
        <tr>
          <td width='16%'>Quellverzeichnis:</td>
          <td width='84%'><input type='text' name='source' size='30'></td>
        </tr>
        <tr>
          <td width='16%'>Zielverzeichnis:</td>
          <td width='84%'><input type='text' name='destination' size='30'></td>
        </tr>
        <tr>
          <td width='16%'>Breite in Pixel:</td>
          <td width='84%'><input type='text' name='width' size='4'></td>
        </tr>
        <tr>
          <td width='16%'>Höhe in Pixel:</td>
          <td width='84%'><input type='text' name='height' size='4'></td>
        </tr>
          <tr>
          <td width='16%'>Qualität:</td>
          <td width='84%'><input type='text' name='quality' size='4' value='100'></td>
        </tr>
        <tr>
          <td width='16%'>Proportional:</td>
          <td width='84%'><input type='checkbox' name='fixed' checked></td>
        </tr>
        <tr>
          <td width='16%'></td>
          <td width='84%'></td>
        </tr>
        <tr>
          <td width='16%'></td>
          <td width='84%'><input type='submit' name='submit' value='Abschicken'</td>
        </tr>
      </table>
      </form>
        </center>
      </div>
<?php
   }
   else
   {
      // Bei Timeout-Problemen den Wert erhöhen
      ini_set("max_execution_time", "3000");

      $source = $_POST["source"];
      $dest   = $_POST["destination"];
      $width  = $_POST["width"];
      $height = $_POST["height"];
      $quality = $_POST["quality"];

      if (isset($_POST["fixed"]))
        $fixed   = true;
      else
        $fixed   = false;

      if (! strlen ($source))
      {
         echo "Kein Quellverzeichnis";
         exit;
      }

      if (! strlen ($dest))
      {
         echo "Kein Zielverzeichnis";
         exit;
      }

      if (! strlen ($width) && ! strlen ($height))
      {
         echo "Keine Größen angegeben";
         exit;
      }

      if ($fixed)
      {
         if (strlen ($width))
            $height = 0;
          else if (strlen ($height))
            $widht = 0;
      }

      include_once("./functions.inc.php");

      $data = getImagesFromPath($source);

      if (! file_exists($dest))
      {
         if ( ! mkdir ($dest, "0777"))
         {
           echo "Verzeichnis $dest konnte nicht angelegt werden";
           exit;
         }
      }
      foreach($data as $name)
      {
          $in  = $source . "/" . $name;
          $out = $dest . "/" . $name;
          $out = str_replace(" ", "_", $out);
          $ret = resizeImage($in, $out, $width, $height, $quality);
          if ($ret)
            echo "Grafik $out erzeugt<br>\n";
          else
            echo "<font color='#FF0000'>Grafik $out konnte nicht erzeugt werden</font><br>\n";
      }

   }
?>
</body>
</html>


PHP:
<?php
  function getImagesFromPath($path)
  {
    $result = array();

    $handle=opendir($path);

    while ($file = readdir ($handle))
    {
       if ($file != "." && $file != "..")
       {
          if (! is_dir($file))
          {
            $tmp = strtolower($file);
            $sub = substr($tmp, -4);
            if ($sub == ".png" || $sub == ".jpg" || $sub == ".gif")
               $result[] = $file;
          }
       }
    }

    return $result;
  }

  function resizeImage($file_name_src, $file_name_dest, $width = 0, $height = 0, $quality = 100)
  {

   if (file_exists($file_name_src)  && isset($file_name_dest))
   {
       if ($width == 0 && $height == 0)
         return false;
      
       $file_name_dest = strtolower($file_name_dest);
      
       $est_src = pathinfo(strtolower($file_name_src));
       $est_dest = pathinfo(strtolower($file_name_dest));

       $size = getimagesize($file_name_src);

       if ($height && ! $width)
       {
         $h = number_format($height, 0, ',', '');
         $w = number_format(($size[0]/$size[1])*$height,0,',','');
       }
       else if (! $height && $width)
       {
         $w = number_format($width, 0, ',', '');
         $h = number_format(($size[1]/$size[0])*$width,0,',','');
       }
       else
       {
         $h = number_format($height, 0, ',', '');
         $w = number_format($width, 0, ',', '');
       }

       if ($est_dest['extension'] == "gif" || $est_dest['extension'] == "jpg" || $est_dest['extension'] == "png")
       {
           $dest = imagecreatetruecolor($w, $h);
           imageantialias($dest, TRUE);
       }
       else
       {
           return FALSE;
       }

       switch($size[2])
       {
       case 1:      //GIF
           $src = imagecreatefromgif($file_name_src);
           break;
       case 2:      //JPEG
           $src = imagecreatefromjpeg($file_name_src);
           break;
       case 3:      //PNG
           $src = imagecreatefrompng($file_name_src);
           break;
       default:
           return FALSE;
           break;
       }

       imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $h, $size[0], $size[1]);
      
       switch($size[2])
       {
       case 1:
            imagegif($dest,$file_name_dest);
            break;
       case 2:
           imagejpeg($dest,$file_name_dest, $quality);
           break;
       case 3:
           imagepng($dest,$file_name_dest);
       }
       return TRUE;
   }
   return FALSE;
}
 
Zurück