Andreas Görtz: Bild online verkleinern und ausgeben

Beitrag lesen

Guten Morgen,

ich schreibe erstmal, wie ich mir das (nach deinem ersten Plan) vorgestellt habe:

<?php

error_reporting(E_ALL);
session_start();

if (!isset($_SESSION['data']) && isset($_FILES['image'])) {

// das Formular wurde gerade abgeschickt

/**
     * - deine ganzen Überprüfungen auf $_FILES['image']['tmp_name'] anwenden
     * - Bilddaten mittels fread() aus $_FILES['image']['tmp_name'] auslesen und in $_SESSION['data'] speichern
     * - Die Größe des Originals in den Session-Variablen 'oldWidth' und 'oldHeight' o.ä. speichern
     * - die restlichen Formulardaten in den Session-Variablen 'newWidth', 'newHeight' und 'quali' o.ä. speichern
     */

}

/**
 * hier stehen dir jetzt die Daten der Session zur Verfügung und
 * ich hoffe, dass sie das auch dann noch tun, wenn das Formular nicht
 * abgeschickt wurde, also nach dem Klick auf "Grafik speichern unter..."
 */

// Ressourcen erstellen
$quell_datei = imagecreatefromjpeg($_SESSION['data']);
$ziel_datei  = imagecreate($_SESSION['newWidth'], $_SESSION['newHeight']);

// Größe ändern
imagecopyresized($ziel_datei, $quell_datei, 0, 0, 0, 0, $_SESSION['newWidth'], $_SESSION['newHeight'], $_SESSION['oldWidth'], $_SESSION['oldHeight']);

// und ausgeben...
header("Content-Type: image/jpeg");
imagejpeg($ziel_datei, "", $_SESSION['quali']);

?>

Ich bin mir nicht sicher, ob es so funktioniert und kann es hier leider nicht testen.

Jetzt noch zu deinem Script:

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

if($action=="ausgabe")
{
  session_start();

wie du oben siehst, reicht es aus, session_start() einmal an den Anfang der Datei zu schreiben. Die Session wird i.d.R. durch Cookies automatisch wieder aufgenommen.

$datei         = $_SESSION['datei_inhalt'];

$bild_info     = getimagesize($datei);

das wird nicht funktionieren, da getimagesize() einen Dateinamen erwartet. Daher habe ich oben diese Werte ebenfalls in Session-Variablen gespeichert - bei diesem Versuch kannst du die natürlich auch über GET weitergeben.

Der Rest sieht IMHO eigentlich ganz okay aus - ich denke, das könnte so funktionieren.

Gruß,
Andreas.