Hallo!
Habe kurz noch einen Bug gefunden und verbessert:
Im Ausgabe-Teil waren die Maße des Originalbildes nicht vorhanden. Habe sie nun als GET-Parameter mit übergeben. Der aktuelle Code wäre also:
===========================
<?php
/* Beim Lesen des folgenden Codes beginnt man am besten mit dem else{}-Bereich! */
if($_GET['action']=="ausgabe") //Wenn Param. ausgabe gesetzt ist, liefert Script den Inhalt des Bildes für den IMG-Tag unten
{
session_start();
$datei = $_SESSION['datei_inhalt']; //Enthält den Dateiinhalt der hochgeladenen Datei
$width = $_GET['new_w']; //Breite des endgültigen Bildes in px
$height = $_GET['new_h']; //Höhe des endgültigen Bildes in px
$bild_w = $_GET['old_w']; //Breite des Originalbildes
$bild_h = $_GET['old_h']; //Höhe des Originalbildes
$quali = $_GET['quali']; //Qualität der Komprimierung zwischen 1 und 100
$quell_datei = imagecreatefromjpeg($datei); //Erstellt eine JPEG-Datei aus dem Dateiinhalt der hochgeladenen Datei
$ziel_datei = imagecreatetruecolor($width,$height);
$resize_datei = imagecopyresampled($ziel_datei,$quell_datei,0,0,0,0,$width,$height,$bild_w,$bild_h); //Bildgröße anpassen
$interlace = imageInterlace($ziel_datei,1); //Interlacing-Funktion: 0 = aus; 1 = an
header("Content-Type: image/jpeg"); //Ausgabe des Bildes, welches dann per IMG-Tag (s.u.) angezeigt wird
$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
$prozent = $_POST['prozent']; //Prozentuale Veränderung
$datei = $_FILES['image']['tmp_name']; //Die hochgeladene Datei
$bild_info = getimagesize($datei);
$bild_w = $bild_info[0];
$bild_h = $bild_info[1];
if($prozent!="") //Ggf. relative Anpassung der Seitenverhältnisse
{
$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; }
$temp = fopen($datei,"r"); //Hochgeladene Datei wird geöffnet...
$temp = fread($temp,filesize($datei)); //...und ausgelesen
session_start();
$_SESSION['datei_inhalt'] = $temp; //Dateiinhalt der hochgeladenen Datei wird in einer Sessionvariable abgespeichert
//Ein IMG-Tag wird ausgegeben, über den die Funktion erneut aufgerufen wird und diesmal die Bilddaten ausgibt
echo "<img src='" . basename($_SERVER["PHP_SELF"]) . "?action=ausgabe&new_w=" . $width . "&new_h=" . $height . "&old_w=" . $bild_w . "&old_h=" . $bild_h . "&quali=" . $quali . "'>";
}
?>
Funktioniert leider immer noch nicht :-/
Das kaputte Bild hat die URL http://mastershrimp.com/test/php/resize/image_resize_script.php?action=ausgabe&new_w=200&new_h=200&old_w=650&old_h=500&quali=100
Also muss der Fehler entweder im Datei-Auslesen (Nicht genug Rechte? Würde PHP da nicht meckern?) oder im "Ausgabe"-Teil sein, oder?
Ich habe nun folgende Vermutung:
imagecreatefromjpeg():
"imagecreatefromjpeg -- Erzeugt ein neues Bild im JPEG-Format, welches aus einer Datei oder von einer URL gelesen wird.
int imagecreatefromjpeg ( string filename)"
Das kriegt ja schonmal keinen Pfad, sondern nur den Dateiinhalt. Das ist wahrscheinlich schon der erste Fehler. Aber wie mache ich das dann? Ich muss den Dateiinhalt in eine temporäre Datei schreiben und dann den Zeiger dieser Datei an den Rest weitergeben. Ich denke das ist der Fehler.
Aber wie mache ich das?
Gruß
Mastershrimp