Code nach Geschwindigkeit optimieren

ahykes

Erfahrenes Mitglied
Hallo Jungs!

Habe das folgende Gallery-Script geschrieben. Nun gut. Es läuftganz wunderbar - nur die Geschwindigkeit läßt bei mehr als 10 Bilder echt zu wüsnchen über. Hättet Ihr einen Tip wie man das schneller machen könnte ?
PHP:
<?
	#Verzeichnis in dem die Bilder liegen
	$searchfile= '../images/pics/big/'; 
	#Versuchen das Verzeichnis zu öffnen
	$dir_handle = @opendir($searchfile) or die("! Dein Server is busy! Kann das Verzeichnis nicht öffnen!");
	#Meine ganz privaten Zählvariablen
	$q = 0;
	$rowcount = 0;
	#Tabelle starten
	echo '<table border="0" align="center" cellpadding="0" cellspacing="5" style="border-style: dashed; border-width: 1px; border-color: #333333;">';
	echo '<tr>';
	
	#Verzeichnis auslesen und Dateinamen in ein Array schreiben
	while ($file = readdir($dir_handle)) 
	{   
		 $q++;
			$dir[$q] = $file;
	}   
	closedir($dir_handle);
	
	for($i=0; $i<=count($dir); $i++)
	{
		if($dir[$i] != '' && $dir[$i] != '.' && $dir[$i] != '..')
		{
			#jpeg noch ein bisschen verkleinern (Speicher)
			$tmp = '../images/pics/big/'.$dir[$i];
			$im = imagecreatefromjpeg($tmp);
			
			#erst grau machen
			if ($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) {
			   imagejpeg($im, '../images/tmp/'.$dir[$i]);
			} 
			#dann sepia machen (90, 80, 40)
			if ($im && imagefilter($im, IMG_FILTER_COLORIZE, 90, 80, 40)) {
			   imagejpeg($im, '../images/tmp/'.$dir[$i]);
			} 
			imagedestroy($im);
			#dann ausgeben
			$file = '../images/tmp/'.$dir[$i];
			
			#Mach halt ne Grafik
			$src = imagecreatefromjpeg($file);
			#Mach halt Truecolor
			$im = imagecreatetruecolor(100, 100);
			#Mach halt n Ausschnitt
			imagecopyresized ($im, $src,0,0,50,50, 100,100, 100, 100); 
			#Mach halt speichern
			imagejpeg($im, '../images/tmp/'.$dir[$i]);
			
			#Tabellenzeile ausgeben
			echo '<td><a href="img.php?bild='.$dir[$i].'" class="img"><img src="../images/tmp/'.$dir[$i].'" border="0" class="imgnormal"></a></td>';
			#Nach vier Grafiken eine neue Zeile anfangen
			if($i%4==2){ echo '</tr>'; $rowcount = 0;}
		}
	}	
		echo '</table>';
	
?>
 
Mein Vorschlag:
PHP:
<?php

	$src_dir = '../images/pics/big/';
	$dst_fir = '../images/tmp/';
	$handle = @opendir($dir)
		or die('Das angegebene Verzeichnis kann nicht geöffnet werden!');

	echo '<table><tr>';
	while( $file = readdir($handle) ) {
		if( $file == '' || $file == '.' || $file == '..' || file_exists($dst_dir.$file) ) {
			continue;
		}
		// Quellgrafik wird geladen
		$src_im = imagecreatefromjpeg($src_dir.$file);
		// Zielgrafik wird erstellt
		$dst_im = imagecreatetruecolor(100, 100);
		// Ausschnitt der Quellgrafik wird in Zielgrafik kopiert
		imagecopyresized($dst_im, $src_im, 0, 0, 50, 50, 100, 100, 100, 100);
		// Quellgrafik wird gelöscht
		imagedestroy($src_im);
		// Grauskala
		imagefilter($dst_im, IMG_FILTER_GRAYSCALE);
		// Sepia (90, 80, 40)
		imagefilter($dst_im, IMG_FILTER_COLORIZE, 90, 80, 40);
		// Zielgrafik wird in Datei gespeichert
		imagejpeg($dst_im, $dst_dir.$file);
		// Zielgrafik wird gelöscht
		imagedestroy($dst_im);

		// Tabellenzeile wird ausgeben
		echo '<td><a href="img.php?bild='.$file.'"><img src="'.$dst_dir.$file.'"></a></td>';
		// Nach vier Grafiken eine neue Zeile anfangen
		if( $i % 4 == 2 ) {
			echo '</tr><tr>';
		}
	}
	echo '</tr></table>';
	closedir($dir_handle);

?>
Die wichtigsten Änderungen:
  • Bereits verarbeitete Grafiken werden übersprungen
  • die Reihenfolge der Grafikverarbeitung ist nun effektiver, da nur der später benötigte Ausschnitt verarbeitet wird
 
Zurück