Thumbnail erzeugen ohne speichern

Nochmal detailliert zu meinem Problem...ich verzweifel langsam daran.

Ich habe das Bild $_FILES['bild']
Da handelt es sich aber nur im eine tmp-Datei.
mit $_SESSION['bild'] = $_FILES['bild'] bekomme ich die Datei auch in die Vorschau Datei (ich möchte möglichst wenig über GET gehen).

Wie kriege ich die Datei jetzt aber mit meiner Bild-PHP ausgelesen und als Bild konvertiert:
PHP:
<?php
	session_start();
	if(!isset($_SESSION['bild']) ) {
		die("Kein Bild vorhanden");
	}
	if( headers_sent() )
		die("Konnte Bild nicht anzeigen");

	$datei = $_SESSION['bild'];
         $new_width = $_SESSION['thumb_width'];
         $new_height = $_SESSION['thumb_height'];
	//Feststellen der Größe
	$size = getImageSize($datei);
         $width = $size[0];
         $height = $size[1];
         //Erstellen eines neuen leeren Bildes
         $new_image = imagecreatetruecolor($new_width,$new_height);
	//Kopie vom Ursprungsbild erstellen
         $old_image = ImageCreateFromJpeg($datei);
         //Altes Bild verkleinert in das neue hereinkopieren
         ImageCopyResampled($new_image, $old_image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

         //Erstellen und Anzeigen des neuen Bildes
        	header("Content-type: image/jpeg");
         ImageJpeg($new_image);

?>

So klappt es nicht. In diesem Falle sieht der die $_SESSION['bild'] Datei scheinbar nicht als Bild.
Wie ist der nötige Zwischenschritt? Auslesen mit fread bekomme ich auch nicht hin.
Wie läufts?
 
Uhm... $_FILES['bild'] enthält nur eine Referenz auf die temporäre Datei, du solltest also die Datei auslesen auf die $_FILES['bild'] zeigt und das in der Session speichern, was die Session aber wiederum unnötig speicher fressen lässt.

Du musst das Bild nach dem Hochladen doch eh irgendwo speichern?
Wenn alles nichts hilft speicher das temporäre Bild irgendwo und lass die bild.php davon das Thumbnail machen.
 
Wenn du es einfach nur verkleinern willst, dann mach es einfach mit den width und height. Dabei kommt das selbe raus, nur ökonomischer. Bilder einfach nur zu verkleinern und auszugeben mit einem PHP Script ist völliger Schwachsinn...

Code:
<img src="100" height="100" src="deinbild.jpg">

holzmensch
 
@holzmensch

Ja schon, aber um das Seitenverhältnis beizubehalten muss er ja auch die Dimensionen des Bildes auslesen und runterrechnen und das dann für jedes Bild (wenns mehrere Thumbnails auf einer Seite sind) und das Bild sieht einfach besser aus wenns nicht "nur" vom Browser skaliert wurde. Ausserdem war mein Anliegen ja eben nicht jedes Bild bei jedem Aufruf erneut zu verkleinern.

Betriff: Ökonomie
Wenn er jedes Bild das demensprechend Groß ist nur per width/height im img Tag verkleinert muss der Client ja bei einer Übersicht von Thumbnails ja immer die große Version laden, was einen großen unterschied machen kann.
Also weder für den Server Traffic noch für den Client Traffic ökonomisch.
 
Zuletzt bearbeitet:
Folgendes ist mein Ziel (um das ganze zu verdeutlichen):
Der User läd ein Bild hoch, sieht eine Vorschau davon.
Er kann jetzt aber noch das Bild ändern.
Da er aber auch andere Daten ändern kann muss der Script feststellen ob ein neues Bild hochgeladen wurde, wenn nicht, dann muss er das alte Bild weiterverwenden (auf den Cache zugreifen).

Ich hab es jetzt doch so gelöst, dass eine Kopie auf dem Server gespeichert wird.
Diese wird beim endgültigen Speichern des Bildes einfach verschoben.
Nachteil ist: Wenn User den Vorgang abbrechen oder aber während des Vorgangs sich für ein anderes Bild entscheiden bleibt eine Dateileiche des Bildes übrig.

Die muss ich dann wohl von Hand löschen.

Danke allen hier,
Gruß,
Ben
 
Naja, wenn dus nicht irgendwo inner Datenbank abgleichen kannst ob das Bild jetzt verwendet wird oder nicht, speicher das Bild halt innem Temp Ordner der von Zeit zu Zeit gelöscht wird z.B. per Cronjob. Um diese Uhrzeiot macht mein Kopf nicht mehr mit ;), ich werd da Morgen nochmal drüber nachdenken.
 
Bilder einfach nur zu verkleinern und auszugeben mit einem PHP Script ist völliger Schwachsinn...

Was du da sagst (schreibst :rolleyes:) ist völliger Schwachsinn.
Bist du schonmal auf ner Gallerie gewesen in der 1600*1200 Bilder angezeigt werden die nur im HTML Code kleiner gemacht sind? Du kannst den Bildern zuschauen wie sich sich langsam aufbauen.. (hab DSL 2000).
Also ist alles schonmal ökonomischer als das was du machen würdest.
 
Zuletzt bearbeitet:
Zurück