Bild vor Speichern in MySQl-DB verkleinern
Angelika
- php
Hallo,
ich muss Bilddateien in einer MySQl-DB abspeichern (ist so ausdrücklich gewünscht, MIR sind die Nachteile bekannt!). Das Ganze klappt aber leider nicht so ganz - so sieht es aus:
//So kommt es aus dem Formular an
if (array_key_exists('img',$_FILES))
{
$tmpname = $_FILES['img']['tmp_name'];
$type = $_FILES['img']['type'];
$hndFile = fopen($tmpname, "r");
/////////////////////////////////////////
//Datei verkleinern
$size = getimagesize($tmpname);
$src_img = imagecreatefromjpeg($hndFile);
$dst_img = imagecreatetruecolor(150,200);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, 150, 200, $size[0], $size[1]);
imagejpeg($hndFile);
/////////////////////////////////////////
$data = addslashes(fread($hndFile, filesize($tmpname)));
}
Ohne den Teil "//Datei verkleinern" klappt es prima. Wenn ich den Teil einsetze, dann passiert leider nichts ... könnt Ihr mir sagen, was ich falsch mache.
Habe erstmal eine Größe von 150x200 angenommen, das Ganze passe ich dann bzgl der Seiten-Verhältnisse noch an, wenns läuft.
1000000 Danke.
Eure Angie
Hi,
ich muss Bilddateien in einer MySQl-DB abspeichern (ist so ausdrücklich gewünscht, MIR sind die Nachteile bekannt!).
ja klar, der Kunde ist König - aber ich dachte, die Monarchie sei abgeschafft ... ;-)
/////////////////////////////////////////
//Datei verkleinern
$size = getimagesize($tmpname);
$src_img = imagecreatefromjpeg($hndFile);
$dst_img = imagecreatetruecolor(150,200);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, 150, 200, $size[0], $size[1]);
imagejpeg($hndFile);
/////////////////////////////////////////
Ist dir überhaupt klar, was imagejpeg() tut, wenn es mit nur einem Parameter aufgerufen wird? - Es gibt die erzeugten JPEG-Daten direkt an den Client (Browser) aus. Was auch sonst, mehr Informationen stehen der Funktion ja nicht zur Verfügung.
Wenn du die erzeugten JPEG-Daten wieder in eine Datei speichern willst, solltest du deren Namen als zweiten Parameter angeben. Ob du dabei die temporäre Datei $tmpname überschreiben möchtest, ist Ermessenssache.
$data = addslashes(fread($hndFile, filesize($tmpname)));
Und hier liest du dann immer noch die unveränderte Datei. Übrigens ist addslashes() eine ganz schlechte Idee und gehört eigentlich verboten. Eine richtige, dem Zielkontext angemessene Maskierung/Codierung sollte dort und nur dort erfolgen, wo Daten in diesen Zielkontext eingebracht werden. In deinem Fall also bei der Übergabe an mySQL.
Ohne den Teil "//Datei verkleinern" klappt es prima. Wenn ich den Teil einsetze, dann passiert leider nichts ...
Das kann ich mir nicht vorstellen - es müsste zumindest soviel passieren, dass du die unveränderte Originaldatei weiterverarbeitest, so wie sie hochgeladen wurde.
So long,
Martin
Hallo alle miteinander,
sowas wie hier finde ich immer wieder schade: Jemand schildert ein Problem, bittet um Hilfe, man glaubt, den Knackpunkt erkannt zu haben und gibt eine Hilfestellung - und nichts kommt zurück.
Liebe Hilfesuchende, ich glaube ich spreche für die Mehrheit der willigen Helfer hier, wenn ich sage: Irgendein Feedback wäre sehr willkommen. Das kann ein simples Dankeschön sein, gern auch ein Nachhaken ("Hinweis xyz habe ich nicht ganz verstanden, wie meinst du das?"), gern auch Kritik, wenn die vermeintliche Hilfe "einfach zu hoch" ist oder wegen eines Missverständnisses völlig am Problem vorbeigeht.
Aber gar keine Reaktion mehr ... das ist enttäuschend. Man hat als Helfer keinen Anhaltspunkt, ob der Hinweis angekommen ist und genützt hat, oder ob der arme Tropf resigniert und aufgegeben hat. In manchen Foren hat der Thread-Initiator die Möglichkeit, den Thread als "SOLVED" (gelöst) zu markieren - das haben wir hier nicht, daher wäre eine kurze Wortmeldung stattdessen einfach eine feine Sache.
Schönes Wochenende allen Lesern,
Martin