kostenloser Webspace werbefrei: lima-city


Bildgröße in Datenbank ändern

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    treff-punkt

    treff-punkt hat kostenlosen Webspace.

    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.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. h**s

    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
  4. Autor dieses Themas

    treff-punkt

    treff-punkt hat kostenlosen Webspace.

    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
  5. h**s

    überprüfe ob du eventuell einen pfad vor 'bildtemp.jpg' schreiben musst - und vergewissere dich das der ordner auch die netsprechenden schreibrechte gesetzt hat
  6. Autor dieses Themas

    treff-punkt

    treff-punkt hat kostenlosen Webspace.

    Dankeschön, das hat ja tatsächlich funktioniert. :)
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!