Heyho!
Ich hoffe, ich verscheuche nicht alle potentiellen Helfer mit der Größe des Postinges - es sind nur 2 große Code-Teile mit etwas Text ;-). Es sieht also größer aus als es in Wirklichkeit ist.
Vorneweg: Um die eigentliche Realisierung einer solchen Funktion geht es nicht - die habe ich bereits mithilfe von Archiv, SelfPHP und dem deutschen PHP Manual halbwegs hingekriegt.
Das Ganze scheitert momentan nur ein einem simplen Problem: Das Bild, das ich ausgebe, lässt sich nicht abspeichern.
Mozilla (Rechtsklick-> Grafik speichern unter) speichert eine HTML-Datei ab und der IE kann die JPEG-Datei nur in einer BMP-Datei abspeichern.
Das ist der besagte Code:
======================================
<?php
$datei = $_FILES['image']['tmp_name'];
$bild_info = getimagesize($datei);
$bild_w = $bild_info[0];
$bild_h = $bild_info[1];
$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)
$html_head = "";
if($quali=="" || $quali < 1 || $quali > 100)
{ echo $html_head . "Der Grad der Qualität muss zwischen 1 und 100 liegen!"; exit; }
if($width=="" || $height=="")
{ echo $html_head . "Es wurden keine Ziel-Maße übergeben!"; exit; }
if($bild_w=="" && $bild_info[2]!="2")
{ echo $html_head . "Das ist kein Bild oder kein JPEG-Bild!"; exit; }
$quell_datei = imagecreatefromjpeg($datei);
$ziel_datei = imagecreate($width,$height);
$resize_datei = imagecopyresized($ziel_datei,$quell_datei,0,0,0,0,$width,$height,$bild_w,$bild_h);
header("Content-Type: image/jpeg");
$ausgabe = imagejpeg($ziel_datei,"",$quali);
?>
In einem anderen Forum hat man mir dann zu folgender Prozedur geraten, die aber daran scheitert, dass das Bild nur temporär abgespeichert wird (was ja auch so sein soll) und beim erneuten Aufrufen des Scripts nicht mehr vorhanden ist:
- Formular sendet Bild an image_resize_script.php
- image_resize_script.php gibt einen <src>-Tag aus, dessen Quelle wieder die image_resize_script.php ist, allerdings mit dem Parameter ?action=ausgabe.
- Bekommt das Script diesen Parameter, verkleinert es das Bild und gibt es aus - Aber das Bild ist ja schon längst wieder weg, weil die Funktion erneut aufgerufen wurde.
Hier der Code:
<?php
$datei = $_FILES['image']['tmp_name'];
$bild_info = getimagesize($datei);
$bild_w = $bild_info[0];
$bild_h = $bild_info[1];
$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)
if($_GET['action']=="ausgabe")
{
$html_head = "";
if($quali=="" || $quali < 1 || $quali > 100)
{ echo $html_head . "Der Grad der Qualität muss zwischen 1 und 100 liegen!"; exit; }
if($width=="" || $height=="")
{ echo $html_head . "Es wurden keine Ziel-Maße übergeben!"; exit; }
if($bild_w=="" && $bild_info[2]!="2")
{ echo $html_head . "Das ist kein Bild oder kein JPEG-Bild!"; exit; }
$quell_datei = imagecreatefromjpeg($datei);
$ziel_datei = imagecreate($width,$height);
$resize_datei = imagecopyresized($ziel_datei,$quell_datei,0,0,0,0,$width,$height,$bild_w,$bild_h);
header("Content-Type: image/jpeg");
$ausgabe = imagejpeg($ziel_datei,"",$quali);
}
else
{ echo "<img src='" . basename($_SERVER["PHP_SELF"]) . "?action=ausgabe'>"; }
?>
FAZIT: Ich weiß nicht, ob man beim 2. Lösungsweg nocht etwas retten kann...Am liebsten wäre es mir, wenn es einen anderen Weg geben würde, der auf dem ersten Script basiert.
Wichtig ist nur, dass das Bild _nicht_ auf dem Server abgespeichert werden soll.
Ich hoffe ich habe mit diesem Riesen-Posting nicht alle möglichen Beantworter vergrault und würde mich freuen, wenn mir jemand einen Tipp geben könnte wie man das Problem aus Code1 oder Code2 beseitigen könnte.
Vielen Dank schonmal für eure bis hierhin aufgebrachten Mühen!
Gruß
Mastershrimp
Kämpft für die Rettung von dem Genitiv!