Advertisement
Krugear

PHP Example

Jan 16th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.03 KB | None | 0 0
  1. // PHP Skript, um ein Mosaik aus mehreren Bildern zu erstellen, welches gleich hoch und breit ist.
  2. // Zu finden auf http://krugear.de/me_irl und http://krugear.de/downloads.jpg
  3.  
  4. <?php
  5. class Scanner{
  6.  
  7.   // Funktion um die Wurzel aus dem Input herauszufinden.
  8.   // Dies wird später gebraucht, damit das Raster in der
  9.   // Höhe und Breite gleich groß sind.
  10.   function findSqrt($input){
  11.       $filessorted = round(sqrt(count($input)));
  12.       return $filessorted;
  13.   }
  14.  
  15.   // Diese Funktion Scannt das eingegebene Verzeichnis und
  16.   // formatiert das Array so, dass nur noch Bilder vorhanden sind.
  17.   function scanAndFormat($dir){
  18.       $ignored = array('.', '..', '.svn', '.htaccess');
  19.       $files = array();    
  20.       foreach (scandir($dir) as $file) {
  21.           if (in_array($file, $ignored)) continue;
  22.           $files[$file] = filemtime($dir . '/' . $file);
  23.       }
  24.       arsort($files);
  25.       $files = array_keys($files);
  26.       $files = preg_grep('~\.(jpeg|jpg|png)$~',$files);
  27.       return ($files) ? $files : false;
  28.   }
  29.  
  30. }
  31.  
  32.  
  33.  
  34.  
  35.  
  36. $scan = new Scanner();
  37. $img = new Imagick();
  38. $draw = new ImagickDraw();
  39. // Verzeichnis, welches jeden Tag um ein weiteres Bild erweitert wird, wird gescannt.
  40. $files = $scan->scanandformat('/var/www/html/meirlimg/');
  41.  
  42. // Die Wurzel aus der ANzahl an Dateien in dem Ordner wird herausgesucht.
  43. $average = $scan->findsqrt($files);
  44. $i = 0;
  45.  
  46. $rowimg = new Imagick();
  47.  
  48. foreach($files as $file) {
  49.  
  50.   // Solange der Counter unter dem Wert der Wurzel aus der Gesamtanzahl der Dateien liegt,
  51.   // wird das Array so aufgebaut, dass sich die Dateien erst horizontal anordnen.
  52.   if ($i < $average-1) {
  53.       $file = '/var/www/html/meirlimg/'.$file;
  54.       // Jede Datei wird einzeln geöffnet
  55.       $handle = fopen($file,"r");
  56.       try {
  57.       // Ist die Datei in einem Lesbaren Format, wird sie dem array rowimg hinzugefügt
  58.         $rowimg->readImageFile($handle);
  59.       }
  60.       catch (Exception $e) {
  61.         // Wenn nicht, dann wird die Datei übersprungen
  62.         continue;
  63.       }
  64.       // In diesem Block wird das Bild auf eine gleichgroße Breite und Höhe im
  65.       // Format 1:1 zugeschnitten, damit es in das Raster passt.
  66.       $rowimg->scaleImage(200,200,TRUE);
  67.       $height = $rowimg->getImageHeight();
  68.       $width = $rowimg->getImageWidth();
  69.       $rowimg->extentImage (200,200,-((200-$width)/2),-((200-$height)/2));
  70.       $i++;
  71.     }
  72.     else {
  73.         // Ist der Counter unter dem Wurzelwert, wird...
  74.         $file = '/var/www/html/meirlimg/'.$file;
  75.         $handle = fopen($file,"r");
  76.  
  77.         try {
  78.             // ...ein weiteres Bild angefügt
  79.             $rowimg->readImageFile($handle);
  80.         }
  81.             catch (Exception $e) {
  82.             continue;
  83.         }
  84.         $rowimg->scaleImage(200,200,TRUE);
  85.         $height = $rowimg->getImageHeight();
  86.         $width = $rowimg->getImageWidth();
  87.         $rowimg->extentImage (200,200,-((200-$width)/2),-((200-$height)/2));
  88.         $rowimg->extentImage (200,200, 0 , 0);
  89.         $rowimg->resetIterator();
  90.         // Bevor alle Bilder in der Reihe horizontal (false) zusammengesetzt werden.
  91.         $combinedrow = $rowimg->appendImages(false);
  92.         // $img ist das fertige Bild, welches nun mit der horizontalen Reihe bestückt wird
  93.         $img->addImage($combinedrow);
  94.         // Die horizontale Reihe wird geleert
  95.         $rowimg = new Imagick();
  96.         // Der Counter wird zurückgesetzt
  97.         $i = 0;
  98.     }
  99. }
  100.  
  101.  
  102.  
  103. try {
  104.     $rowimg->resetIterator();
  105.     $combinedrow = $rowimg->appendImages(false);
  106.     // Die letzte Reihe wird angefügt, falls sich die letzte Datei innerhalb
  107.     // des Wertes der Wurzel befunden hat, andererseits ist die Reihe leer.
  108.     $img->addImage($combinedrow);
  109. }
  110. catch (Exception $e){  
  111. }
  112.  
  113.  
  114. $img->resetIterator();
  115.  
  116. // Die in $img gelagerten Bilderreihen werden jetzt vertikal aneinandergerreiht
  117. $combinedfinal = $img->appendImages(true);
  118.  
  119. $combinedfinal->setImageFormat("jpeg");
  120. // und gespeichert.
  121. $combinedfinal->writeImage('/var/www/html/downloads.jpg');
  122.  
  123.  
  124. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement