Ich habe versucht, Transparenz zu bekommen, um mit meiner Anwendung zu arbeiten (die Bilder dynamisch vor dem Speichern skaliert) und ich glaube, ich habe schließlich das Problem nach viel Irreführung über imagealphablending
und imagesavealpha
eingegrenzt. Das Quellbild wird niemals mit der richtigen Transparenz geladen!PHP GD imagecreatefromstring löscht Transparenz
// With this line, the output image has no transparency (where it should be
// transparent, colors bleed out randomly or it's completely black, depending
// on the image)
$img = imagecreatefromstring($fileData);
// With this line, it works as expected.
$img = imagecreatefrompng($fileName);
// Blah blah blah, lots of image resize code into $img2 goes here; I finally
// tried just outputting $img instead.
header('Content-Type: image/png');
imagealphablending($img, FALSE);
imagesavealpha($img, TRUE);
imagepng($img);
imagedestroy($img);
Es wäre eine ernsthafte architektonische Schwierigkeit, das Bild aus einer Datei zu laden; Dieser Code wird mit einer JSON-API verwendet, die von einer iPhone-App abgefragt wird, und in diesem Fall ist es einfacher (und konsistenter), Bilder als Base64-codierte Strings in die POST-Daten hochzuladen. Muss ich absolut brauchen, um das Bild irgendwie als Datei zu speichern (nur damit PHP es wieder in den Speicher laden kann)? Gibt es vielleicht eine Möglichkeit, einen Stream von $fileData
zu erstellen, der an imagecreatefrompng
übergeben werden kann?
Kann das Problem auf 'PHP 5.3.10/GD 2.0' nicht reproduzieren, funktioniert gut. Welche Versionen verwendest du? Könnte von etwas anderem kommen .. Beschädigter PNG-Eintrag? Wie eine iPhone App, die ein Bild mit schlechter Qualität hochlädt? Just Shots im Dunkeln – Touki
Ich testete dies auf 'PHP 5.3.16-1 ~ dotdeb.0' (mit Suhosin) mit' GD 2.0.34' (2.0.34 kompatibel) auf meiner Debian-Box, und als ich 'imagepng lief 'Die transparenten Teile waren schwarz. Dies passierte, wenn ich 'imagecreatefromstring' oder' imagecreatefrompng' verwendete. –
Ich bin in PHP 5.3.10/GD (2.0.34 kompatibel). – meustrus