GD erstellt beim Resampling schwarz-weiße Bilder
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
alte funktion
auswirkung
bessere ergebnisse
bestimmte bilder
bild
browser
code
einzige vorschlag
erzielen
feststelle
gleicher code
idee
image
liegen
list
problem
ratio
sagen
variable bild
wirklichen fehler
-
Ich habe ein Script, das eine Liste ausliest, und dann bestimmte Bilder verkleinert, und anschließend speichert. Leider kommen die Bilder nur in Schwarz/Weiß (genauer gesagt Graustufen) raus. Hat jemand eine Idee, woran das liegen könnte? Hier der Code:
// Bilddaten feststellen $size=getimagesize($bild); $breite=$size[0]; $hoehe=$size[1]; $neueBreite=450; $neueHoehe=intval($hoehe*$neueBreite/$breite); if($size[2]==1) { // GIF $altesBild=ImageCreateFromGIF($bild); $neuesBild=ImageCreate($neueBreite,$neueHoehe); ImageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite, $neueHoehe,$breite,$hoehe); ImageGIF($neuesBild, 'verkleinert_'.$bild); $a = true; } if($size[2]==2) { // JPG $altesBild=ImageCreateFromJPEG($bild); $neuesBild=ImageCreate($neueBreite,$neueHoehe); ImageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite, $neueHoehe,$breite,$hoehe); ImageJPEG($neuesBild, 'verkleinert_'.$bild); $a = true; } if($size[2]==3) { // PNG $altesBild=ImageCreateFromPNG($bild); $neuesBild=ImageCreate($neueBreite,$neueHoehe); ImageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite, $neueHoehe,$breite,$hoehe); ImagePNG($neuesBild, 'verkleinert_'.$bild); $a = true; } if(!$a) echo '"'.$bild.'" ist in keinem gültigen Format!';
Die Variable $bild ist bereits gegeben, und enthält den Dateinamen (bzw. Pfad) des Bildes, das verkleinert werden soll. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Vielleicht liegt es am Bild oder an deinem Browser.
-
Am Browser kann es schonmal garnicht liegen, da überhaupt kein Bild ausgegeben wird.
Ich muss noch etwas ergänzen: Vorher hatte ich ein anderes Bild, gleicher Code, nur mit dem kleinen Unterscheid, dass ich die Bilder ausgeben ließ, und nicht speichern. Jetzt ist es andersherum. -
Funktioniert das nur bei dir nicht, oder allgemein nicht?
-
Überhaupt nicht. Ich habe keine Ahnung, wieso es alles nur in Schwarz-Weiß ausspuckt. Hat vielleicht irgendjemand eine Idee, was falsch sein könnte?
-
Nein, ich hab mir den Code schon einige Male angesehen, erkenne aber keinen wirklichen Fehler. Ich kann dir nur sagen, dass du vielleicht bessere Ergebnisse erzielen würdest, wenn du imagecreatetruecolor() und imagecopyresampled() nutzt, aber das sollte eigentlich keine Auswirkungen auf das Problem haben. Vielleicht sind die Bilder in irgendeinem exotischen Gif(Jpeg-Forumat abgespeichert, mit dem GD nicht klar kommt.
Threadtitel geändert, damit es etwas mehr über das Problem aussagt.
Beitrag zuletzt geändert: 4.10.2009 14:34:41 von nikic -
nikic schrieb:
Ich kann dir nur sagen, dass du vielleicht bessere Ergebnisse erzielen würdest, wenn du imagecreatetruecolor() und imagecopyresampled() nutzt, aber das sollte eigentlich keine Auswirkungen auf das Problem haben.
Könntest du mir bitte den Code so machen? Denn das ist ja der einzige Vorschlag, den es bis jetzt gab. -
Einfach imagecreate durch imagecreatetruecolor und imagecopyresized durch imagecopyresampled ersetzen. Aber das sollte wirklich nichts am Problem ändern, sondern die Bildqualität erhöhen.
Hier eine alte Funktion von mir, die ganz sicher funktioniert:
function thumb($name, $width) { if(file_exists("images/".$name)) { if(!file_exists("images/thumbs/".$width."px_".$name)) { list($w, $h, $t) = getimagesize("images/".$name); $t = image_type_to_extension($t, false); $ratio = $h/$w; $height = round($width*$ratio); $resized = imagecreatetruecolor($width, $height); if($t=="jpg"||$t="jpeg") { $old = imagecreatefromjpeg("images/".$name); } else if($t=="png") { $old = imagecreatefrompng("images/".$name); } else if($t=="gif") { $old = imagecreatefromgif("images/".$name); } else { return "noimg.jpg"; } imagecopyresampled($resized, $old, 0, 0, 0, 0, $width, $height, $w, $h); if($t=="jpg"||$t="jpeg") { imagejpeg($resized, "images/thumbs/".$width."px_".$name); } else if($t=="png") { imagepng($resized, "images/thumbs/".$width."px_".$name); } else if($t=="gif") { imagegif($resized, "images/thumbs/".$width."px_".$name); } } return "images/thumbs/".$width."px_".$name; } else { return "noimg.jpg"; } }
Vielleicht findest du anhand dessen doch noch den Fehler...
Beitrag zuletzt geändert: 4.10.2009 17:25:41 von nikic -
Vielen Dank! Es funktioniert einwandfrei!
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage