Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // PHP Skript, um ein Mosaik aus mehreren Bildern zu erstellen, welches gleich hoch und breit ist.
- // Zu finden auf http://krugear.de/me_irl und http://krugear.de/downloads.jpg
- <?php
- class Scanner{
- // Funktion um die Wurzel aus dem Input herauszufinden.
- // Dies wird später gebraucht, damit das Raster in der
- // Höhe und Breite gleich groß sind.
- function findSqrt($input){
- $filessorted = round(sqrt(count($input)));
- return $filessorted;
- }
- // Diese Funktion Scannt das eingegebene Verzeichnis und
- // formatiert das Array so, dass nur noch Bilder vorhanden sind.
- function scanAndFormat($dir){
- $ignored = array('.', '..', '.svn', '.htaccess');
- $files = array();
- foreach (scandir($dir) as $file) {
- if (in_array($file, $ignored)) continue;
- $files[$file] = filemtime($dir . '/' . $file);
- }
- arsort($files);
- $files = array_keys($files);
- $files = preg_grep('~\.(jpeg|jpg|png)$~',$files);
- return ($files) ? $files : false;
- }
- }
- $scan = new Scanner();
- $img = new Imagick();
- $draw = new ImagickDraw();
- // Verzeichnis, welches jeden Tag um ein weiteres Bild erweitert wird, wird gescannt.
- $files = $scan->scanandformat('/var/www/html/meirlimg/');
- // Die Wurzel aus der ANzahl an Dateien in dem Ordner wird herausgesucht.
- $average = $scan->findsqrt($files);
- $i = 0;
- $rowimg = new Imagick();
- foreach($files as $file) {
- // Solange der Counter unter dem Wert der Wurzel aus der Gesamtanzahl der Dateien liegt,
- // wird das Array so aufgebaut, dass sich die Dateien erst horizontal anordnen.
- if ($i < $average-1) {
- $file = '/var/www/html/meirlimg/'.$file;
- // Jede Datei wird einzeln geöffnet
- $handle = fopen($file,"r");
- try {
- // Ist die Datei in einem Lesbaren Format, wird sie dem array rowimg hinzugefügt
- $rowimg->readImageFile($handle);
- }
- catch (Exception $e) {
- // Wenn nicht, dann wird die Datei übersprungen
- continue;
- }
- // In diesem Block wird das Bild auf eine gleichgroße Breite und Höhe im
- // Format 1:1 zugeschnitten, damit es in das Raster passt.
- $rowimg->scaleImage(200,200,TRUE);
- $height = $rowimg->getImageHeight();
- $width = $rowimg->getImageWidth();
- $rowimg->extentImage (200,200,-((200-$width)/2),-((200-$height)/2));
- $i++;
- }
- else {
- // Ist der Counter unter dem Wurzelwert, wird...
- $file = '/var/www/html/meirlimg/'.$file;
- $handle = fopen($file,"r");
- try {
- // ...ein weiteres Bild angefügt
- $rowimg->readImageFile($handle);
- }
- catch (Exception $e) {
- continue;
- }
- $rowimg->scaleImage(200,200,TRUE);
- $height = $rowimg->getImageHeight();
- $width = $rowimg->getImageWidth();
- $rowimg->extentImage (200,200,-((200-$width)/2),-((200-$height)/2));
- $rowimg->extentImage (200,200, 0 , 0);
- $rowimg->resetIterator();
- // Bevor alle Bilder in der Reihe horizontal (false) zusammengesetzt werden.
- $combinedrow = $rowimg->appendImages(false);
- // $img ist das fertige Bild, welches nun mit der horizontalen Reihe bestückt wird
- $img->addImage($combinedrow);
- // Die horizontale Reihe wird geleert
- $rowimg = new Imagick();
- // Der Counter wird zurückgesetzt
- $i = 0;
- }
- }
- try {
- $rowimg->resetIterator();
- $combinedrow = $rowimg->appendImages(false);
- // Die letzte Reihe wird angefügt, falls sich die letzte Datei innerhalb
- // des Wertes der Wurzel befunden hat, andererseits ist die Reihe leer.
- $img->addImage($combinedrow);
- }
- catch (Exception $e){
- }
- $img->resetIterator();
- // Die in $img gelagerten Bilderreihen werden jetzt vertikal aneinandergerreiht
- $combinedfinal = $img->appendImages(true);
- $combinedfinal->setImageFormat("jpeg");
- // und gespeichert.
- $combinedfinal->writeImage('/var/www/html/downloads.jpg');
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement