Thumbnail erstellen und temporär öffnen (nicht auf Server speichern)

shorty

Erfahrenes Mitglied
Hey,

ich bin auf der Suche nach einer Möglichkeit, ein Thumbnail von einem Bild zu erstellen, welches als Thumbnail nicht auf dem Server gespeichert wird in dem Sinne, sondern aus dem Temp-Ordner geholt und ausgegeben wird.

Meine Thumbnailklasse sieht zurzeit folgendermaßen aus, allerdings schaffe ich es bisher nur, das Bild auf dem Server abzuspeichern.

PHP:
function createThumb ($filename) {
		
	$pathfile = split("/", $filename);
	$file = $pathfile[3];
		
	$path = "./albums/".$pathfile[2]."/";

	list($width, $height) = getimagesize($filename);
		
	$ratiow = $this->newwidth / $width;
	$ratioh = $this->newheight / $height;
		
	if($ratiow < $ratioh) {
			
		$new_width = $width * $ratiow;
		$new_height = $height * $ratiow;
			
		// Resample
		$image_p = imagecreatetruecolor($new_width, $new_height);
		$image = imagecreatefromjpeg($filename);
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
								
		// Output
		imagejpeg($image_p, $path."thumb_".$file, 100);
			
	} else {
			
		$new_width = $width * $ratioh;
		$new_height = $height * $ratioh;
			
		// Resample
		$image_p = imagecreatetruecolor($new_width, $new_height);
		$image = imagecreatefromjpeg($filename);
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
								
		// Output
		imagejpeg($image_p, $path."thumb_".$file, 100);
			
	}
		
}

Durch "imagecopryresampled" wird die Tempdatei logischerweise kopiert, aber ich finde bisher keine Funktion, die aus der Tempdatei das Bild ausliest bzw. gibt.

Hat jemand von euch eine Idee?
 
Das Bild wird gespeichert, wenn du in imagejpeg() das zweite Argument angibst. Lässt du dieses aber Weg, wird das Bild direkt ausgegeben (http://www.php.net/manual/de/function.imagejpeg.php).
PHP:
// Output
    imagejpeg($image_p, 100);
Diese Methode ist allerdings extrem Speicher- und Ressourcenaufwändig. Außerdem solltest du den Speicher im Script auch wieder löschen.
PHP:
// Output
        imagejpeg($image_p, $path."thumb_".$file, 100);
        
        // Speicher leeren
        imagedestroy( $image_p );
 
D.h., wenn das Bild direkt ausgegeben wird, darf ich ja vorher keine Ausgaben tätigen oder (header senden) ?

Oder gibt es wiederum eine andere Möglichkeit, das Bild darüber hinaus anzeigen zu lassen? Evtl. mit einer externen PHP-Datei in welche ich die Werte zur Anzeige des Bildes übergebe? Aber dann tritt wiederum das Problem auf, dass ich an den Dateinamen nicht rankommen, wenn es darum geht, das Bild zu speichern. Es würde doch sicherlich dann der Name der PHP-Datei beim Abspeichern auf den Computer angezeigt werden?
 
Das Bild wird gespeichert, wenn du in imagejpeg() das zweite Argument angibst. Lässt du dieses aber Weg, wird das Bild direkt ausgegeben (http://www.php.net/manual/de/function.imagejpeg.php).
PHP:
// Output
    imagejpeg($image_p, 100);
Soll die Grafik direkt ausgegeben, die Qualität aber dennoch bestimmt werden, muss als Pfadparameter eine leere Zeichenkette übergeben werden. In deinem Fall wäre der Pfadparameter jedoch 100, muhkuh.

D.h., wenn das Bild direkt ausgegeben wird, darf ich ja vorher keine Ausgaben tätigen oder (header senden) ?
Doch, der Client muss schon wissen, welche Art von Daten ihm zugeschickt werden. Es ist also nur ratsam den Inhaltstyp explizit anzugeben.

In welchem Zusammenhang möchtest du diese Funktion denn nutzen dass die Miniaturen nicht gespeichert werden sollen?
 
Guten Tag,

@Gumbo: Ich arbeite zurzeit an einem Galerieskript. Man lädt Bilder über einen FTP Server in ein zuvor erstelltes Verzeichnis. Über einen Adminbereich werden zur Eintragung des Events (= Bilder, die zuvor auf den FTP-Server geladen wurden) in die DB Thumbnails erstellt, um über einen Radiobutton ein Thumbnail für die Anzeige im Galerieskript auszuwählen (Die Erstellung der Thumbnails dient lediglich der Übsichtlichkeit der Auswahl im Adminbereich). Um die Bilder nun in einem größeren Format anzeigen zu lassen, erstelle ich wieder Thumbnails von den Originalbildern für die Anzeige (allerdings dieses Mal temporär, um nicht eine Reihe von neu erstellten Bildern in dem Eventordner zu erhalten -> das frisst in der Summe auch viel Speicherplatz, bei ca. 30.000 Bildern zurzeit). Daher hatte ich mir überlegt, für die Anzeige der großen Bilder, keine Thumbnails auf dem Server zu speichern, sondern sie temporär zu verkleinern und aufzurufen.

Folgendes Problem stellt sich dann da. Wenn ich sie direkt ausgebe, und sie speichern möchte, erhalte ich als Dateinamen den Namen der PHP-Datei und nicht den Namen des Bildes. Es ist umständlich für diejenigen, die sich die Bilder auf dem PC speichern möchten, diese andauernd umzubennen.
 
Zurück