2009-07-21 8 views
0

Mein Code im Grunde sollte das Bild auf 219px um 127px beschneiden und das Bild in der Datenbank speichern, aber ich bekomme Fehler und kann es nicht herausfinden.Bild crop mit gd dann auf db hochladen, aber nicht die Größe ändern

<?php 
if(isset($_POST['btnupload']) && $_FILES['imglogo']['size'] > 0) { 


$tmpname = $_FILES['imglogo']['tmp_name']; 
$imgsize = $security->secure($_FILES['imglogo']['size']); 
$imgtype = $security->secure($_FILES['imglogo']['type']); 
$school = $security->secure($_POST['school']); 

//crop image 
$canvas = imagecreatetruecolor(219,127); 
$imgattrib = getimagesize($tmpname); 
$source = imagecreatefromjpeg($tmpname); 
imagecopyresized($canvas,$source,0,0,0,0,219,127,$imgattrib[0],$imgattrib[1]); 

$handle = fopen($tmpname, "r"); 
$content = fread($handle, filesize($tmpname)); 
$content = addslashes($content); 
fclose($handle); 




$save = mysql_query("insert into tbl_school_preview values(null,'$school','$content','$imgtype','$imgsize')") or die(mysql_error()); 
//header("Location: school-catalog.php?page=school_preview"); 
} 
?> 

Ich sehe keine Fehler, aber die Ernte ist nicht passiert. Habe ich etwas falsch?

[Aktualisierter Code] Hier ist das neue Stück Block aus irgendeinem Grund wird der Daumen nicht speichern.

if(isset($_POST['btnupload']) && $_FILES['imglogo']['size'] > 0) { 

//$filename = $security->secure($_FILES['imgschool']['name']); 
$tmpname = $_FILES['imglogo']['tmp_name']; 
$imgsize = $security->secure($_FILES['imglogo']['size']); 
$imgtype = $security->secure($_FILES['imglogo']['type']); 
$school = $security->secure($_POST['school']); 

//crop image 
$canvas = imagecreatetruecolor(219,127); 
$imgattrib = getimagesize($tmpname); 
$source = imagecreatefromjpeg($tmpname); 
imagecopyresized($canvas,$source,0,0,0,0,219,127,$imgattrib[0],$imgattrib[1]); 



$newfile = imagejpeg($canvas,'thumb.jpg',100); 

$handle = fopen($newtmpfile, "r"); 
$content = fread($newtmpfile, filesize($newtmpfile)); 
$content = addslashes($content); 
fclose($handle); 




$save = mysql_query("insert into tbl_school_preview values(null,'$school','$content','$imgtype','$imgsize')") or die(mysql_error()); 
+0

"Ich bekomme Fehler und kann es nicht herausfinden." Fehler? würdest du sie mit uns teilen? –

+0

"Ich bekomme Fehler" & "Ich sehe keine Fehler". Welches ist es? Welche Fehler bekommst du? – hobodave

+0

tatsächlich bekam ich Fehler, während ich diese Bedrohung postete, dann schaute ich wieder über den Code und sah, dass ich nur einige Variablen entfernen musste, die ich nicht mehr verwendete. und vergaß einfach den Titel umzubenennen. Hier kümmere ich mich jetzt darum. thnx –

Antwort

0

Sie sollten den Inhalt von $ Leinwand, nicht den Inhalt des ursprünglichen Bildes speichern.

Ausgabe in temporäre Datei mit imagepng, oder direkt Ausgangsstrom, den Sie dann abfangen müssen.

ob_start();

imagepng ($ leinwand);

$ out = ob_get_contents();

ob_end_clean();

+0

Ihr eigentlich richtig aber wo würde $ canvas hingelegt? in der Variable $ handle wie folgt? $ handle = fopen ($ leinwand, "r"); diese iddnt Arbeit und ich sehe nicht, wie es ein Bild so greifen würde. Wenn es Ihnen nichts ausmacht, können Sie es auf mich hinweisen :) Ich versuche, jetzt auch Thnx herauszufinden. –

+0

versucht, dass es nicht für einige reasson arbeiten will :( –

+0

Bitte erläutern: Was meinst du, es funktioniert nicht? – EFraim

0

Sie müssen keine fopen/fwrite Sachen machen, um Ihr Bild zu speichern. Ersetzen Sie alles mit etwas wie:

$filename = '/path/to/desired/save/location.png' 
imagepng($canvas, $filename); 

Und Sie sollten gut gehen. Die imagepng-Funktion schreibt die Datei, wenn Sie ihr den zweiten Parameter geben. Das gleiche gilt für imagegif und imagejpeg.

0

Nur zwei Tipps:

würde ich zunächst die Datei nicht auf das Dateisystem zu speichern .. können Sie ob_start() verwenden, den Inhalt der Datei zu erhalten.

ob_start(); 
imagepng($canvas); 
$imageString = ob_get_contents(); 
ob_end_clean(); 

$save = mysql_query(" 
    insert into tbl_school_preview  
    values(null,'$school',$imagestring,'$imgtype','$imgsize') 
    ")or die(mysql_error()); 

Auch imagecopyresampled() für eine bessere Qualität der Miniaturansicht verwenden. Achten Sie beim Einfügen in die Datenbank auf merkwürdige Zeichen im Bildcode.

Verwandte Themen