Mastershrimp: Bild online verkleinern und ausgeben

Beitrag lesen

Heyho, ich bins noch ein letztes Mal für heute.

Habe jetzt versucht, das mit den Sessionvariablen hinzukriegen - klappt irgendwie nicht. Wahrscheinlich benutze ich sie falsch. Da ich aber innerhalb eines jpeg-Headers nicht prüfen kann, ob die Variablen da sind, muss ich mich wieder an euch wenden...

Das mit dem Datei-Auslesen habe ich mittlerweile hingekriegt. Ich habe einfach die temporäre Datei _vor_ der Bearbeitung ausgelesen und in die Variable getan.

Lange Rede, kurzer Sinn - hier der Code, der _nicht_ funktioniert:

================================

<?php
$action = $_GET['action'];

if($action=="ausgabe")
 {
  session_start();
  $datei         = $_SESSION['datei_inhalt'];

$bild_info     = getimagesize($datei);
  $bild_w        = $bild_info[0];
  $bild_h        = $bild_info[1];

$width   = $_GET['breite'];  //Breite des endgültigen Bildes in px
  $height  = $_GET['hoehe'];   //Höhe des endgültigen Bildes in px
  $quali   = $_GET['quali'];   //Qualität der Komprimierung zwischen 1 und 100 (1 = starke Komprimierung; 100 = hohe Qualität)
  $prozent = $_GET['prozent']; //Prozentuale Veränderung

if($prozent!="")
   {
    $prozent  = $prozent/100;
    $width    = $bild_w * $prozent;
    $height   = $bild_h * $prozent;
   }

$html_head = "<html>\n<head>\n<title>Bild Ausgabe</title>\n</head>\n<body>\n";
  $html_tail = "\n</body>\n</html>";

if($quali=="" || $quali < 1 || $quali > 100)
   { echo $html_head . "Der Grad der Qualität muss zwischen 1 und 100 liegen!" . $html_tail; exit; }

if($width=="" || $height=="")
   { echo $html_head . "Es wurden keine Ziel-Maße übergeben!" . $html_tail; exit; }

if($bild_w=="" && $bild_info[2]!="2")
   { echo $html_head . "Das ist kein Bild oder kein JPEG-Bild!" . $html_tail; exit; }

$quell_datei = imagecreatefromjpeg($datei);
  $ziel_datei  = imagecreatetruecolor($width,$height);

$resize_datei = imagecopyresampled($ziel_datei,$quell_datei,0,0,0,0,$width,$height,$bild_w,$bild_h);

$interlace    = imageInterlace($ziel_datei,1); //Interlacing-Funktion: 0 = aus; 1 = 1

header("Content-Type: image/jpeg");
  $ausgabe = imagejpeg($ziel_datei,"",$quali);
 }

else
 {
  $width   = $_POST['breite'];  //Breite des endgültigen Bildes in px
  $height  = $_POST['hoehe'];   //Höhe des endgültigen Bildes in px
  $quali   = $_POST['quali'];   //Qualität der Komprimierung zwischen 1 und 100 (1 = starke Komprimierung; 100 = hohe Qualität)
  $prozent = $_POST['prozent']; //Prozentuale Veränderung

$datei = $_FILES['image']['tmp_name'];
  $temp  = fopen($datei,"r");
  $temp  = fread($temp,filesize($datei));

session_start();
  $_SESSION['datei_inhalt'] = $temp;

echo "<img src='" . basename($_SERVER["PHP_SELF"]) . "?action=ausgabe&amp;breite=" . $width . "&amp;hoehe=" . $height . "&amp;quali=" . $quali . "&amp;prozent=" . $prozent . "'>";
 }
?>

================================

Kurze Erklärung:

  • Das Script wird ohne Parameter aufgerufen
  • Die hochgeladene, temporäre Datei wird ausgelesen und in die Sessionvariable gespeichert
  • ein IMG-Tag mit dem Script+Parameter "ausgabe" und diversen anderen Informationen wird ausgegeben
  • Der Aufruf des Scripts+Parameter sollte bewirken, dass die Sessionvariable (= die binären Datei-Daten) ausgelesen, bearbeitet und ausgegeben wird
  • Die Ausgabe erfolgt mit einem image/jpeg-Header, sodass innerhalb des img-Tags nun ein Bild erscheinen sollte....

Nur klappt das nicht.

Ich vermute folgende Fehlerquellen:

  1. Denkfehler im generellen Ablauf: Sind alle Variablen noch da, wenn sie da sein sollen?
  2. Session-Variable nicht mehr da: Wie kann ich eine Session wieder aufnehmen? Wie muss ich die Session-ID an session_start() übergeben? Im PHP-Manual steht nix darüber.
  3. Session-Sachen generell falsch angewendet: da ich noch nie vorher mit Sessions gearbeitet habe und auch nur sehr wenig darüber gelesen habe, würde ich nicht ausschließen wollen, dass ich mich da irgendwie vertippt habe (oder so). Könnte mir jemand in diesem Fall den korrekten Code zum Schreiben und wieder-Auslesen einer Sessionvariable posten? Wäre echt cool!
  4. Tippfehler im Code ;)

Ich würde ja das Vorhandensein der Variablen gerne selber prüfen, aber ich kann ja keinen Text ausgeben, wenn der Browser Bild-Daten für den IMG-Tag erwartet...(schlecht formuliert, aber ich hoffe ich konnte es halbwegs deutlich beschreiben)

Wie schon in den vorrausgehenden Postings gesagt, würde ich mich freuen, wenn mir jemand weiterhelfen könnte!

Vielen Dank schonmal an alle, die sich bis hierher durchgekämpft haben!

Gruß

Mastershrimp