Bildgröße in Datenbank ändern
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
ablegen
ausgabe
bild
code
dank
datei
datenbank
einlesen
fehlermeldung
file
formular
funktioniert code
ordner
pfad
platz
sinn
speichern
tip
type
-
Hallo,
Ich stehe vor einem kleinen Problem. Ich möchte ein Bild über ein Formular hochladen, die Bildgröße ändern und anschließend in einer Datenbank abspeichern. Das ist mal der Code, mit dem ich angefangen habe.. und nicht funktioniert.
$tmpname = $_FILES['formularfeldname']['tmp_name']; $type = $_FILES['formularfeldname']['type']; $datei = fopen($tmpname,"r"); $bindata = addslashes(fread($datei,filesize($tmpname))); fclose($datei); $size = getimagesize($tmpname); $breiteAlt = $size[0]; $hoeheAlt = $size[1]; $breiteNeu = 800; $umr = $breiteNeu / $breiteAlt; $hoeheNeu = round($hoeheAlt * $umr); $neuesBild = imagecreate($breiteNeu, $hoeheNeu); $srcImage = imagecreatefromjpeg($tmpname); imagecopyresized($neuesBild, $srcImage, 0, 0, 0, 0, $breiteNeu, $hoeheNeu, $breiteAlt, $hoeheAlt); $sqlbefehl = 'INSERT INTO Tabellenname (Bild) VALUES ("' . $bindata . '")'; mysql_query($sqlbefehl,$link); imagedestroy($neuesBild); imagedestroy($srcImage);
Ich hoffe es kann mir jemand weiterhelfen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
hi,
also wenn du das bild mit geänderter größe in der db speichern willst musst du natürlich erstmal die größe ändern, das bild ablegen und danach das file einlesen:
<?php $tmpname = $_FILES['formularfeldname']['tmp_name']; $type = $_FILES['formularfeldname']['type']; $size = getimagesize($tmpname); $breiteAlt = $size[0]; $hoeheAlt = $size[1]; $breiteNeu = 800; $umr = $breiteNeu / $breiteAlt; $hoeheNeu = round($hoeheAlt * $umr); $neuesBild = imagecreate($breiteNeu, $hoeheNeu); $srcImage = imagecreatefromjpeg($tmpname); imagecopyresized($neuesBild, $srcImage, 0, 0, 0, 0, $breiteNeu, $hoeheNeu, $breiteAlt, $hoeheAlt); imagejpeg($neuesBild, 'bildtemp.jpg'); $datei = fopen("bildtemp.jpg","r"); $bindata = addslashes(fread($datei,filesize($neuesBild))); fclose($datei); $sqlbefehl = 'INSERT INTO Tabellenname (Bild) VALUES ("' . $bindata . '")'; mysql_query($sqlbefehl,$link); imagedestroy($neuesBild); imagedestroy($srcImage); ?>
natürlich ist dein script auf jpgs beschränkt wegen dem imagecreatefromjpeg wodurch die abfrage des type eigentlich überflüssig ist...
ob noch weitere fehlerchen in dem code sind hab ich jetzt nicht überprüft (zb. pfadangaben für "bildtemp.jpg") und ein base64encode für die bindata würde es kompatibler zu anderen datenbanken machen (und den platz nur etwas äufblähen)
es würde für die spätere ausgabe des bildes auch sinn machen die dateigröße der bildausgabe gleich mit in der datenbank zu speichern.
noch ein tip: "imagecopyresampled" erzielt deutlich bessere qualitätsergebnisse als imagecopyresized und anstatt des imagecreate wäre ein imagecreatetruecolor schöner
Beitrag zuletzt geändert: 4.5.2013 20:30:22 von hcms -
Danke für die Tipps, ich habe das jetzt mal ausprobiert.
Bei
imagejpeg($neuesBild, 'bildtemp.jpg')
wirft es mir diese Fehlermeldung aus:
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'bildtemp.jpg' for writing
Was kann ich dagegen machen?
Beitrag zuletzt geändert: 6.5.2013 16:08:09 von treff-punkt -
überprüfe ob du eventuell einen pfad vor 'bildtemp.jpg' schreiben musst - und vergewissere dich das der ordner auch die netsprechenden schreibrechte gesetzt hat
-
Dankeschön, das hat ja tatsächlich funktioniert. :)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage