Próbowałem uzyskać przezroczystość do pracy z moją aplikacją (która dynamicznie zmienia rozmiar obrazów przed ich zapisaniem) i myślę, że w końcu zawęziłem problem po wielu błędach dotyczących imagealphablending
i imagesavealpha
. Obraz źródłowy nigdy nie jest ładowany z odpowiednią przezroczystością!PHP GD imagecreatefromstring discards transparency
// 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);
Byłby to poważny problem architektoniczny, aby załadować obraz z pliku; kod ten jest używany z interfejsem API JSON, który jest pobierany z aplikacji na telefon iPhone i łatwiej jest w tym przypadku (i bardziej spójnie) przesłać obrazy jako łańcuchy kodowane base64 w danych POST. Czy absolutnie trzeba, aby jakoś przechowywać obraz jako plik (tak, aby PHP mógł ponownie załadować go do pamięci)? Czy istnieje sposób na utworzenie strumienia z $fileData
, który można przekazać do imagecreatefrompng
?
Nie można odtworzyć problemu w "PHP 5.3.10/GD 2.0", działa poprawnie. Z jakich wersji korzystasz? Może pochodzić z czegoś innego .. Uszkodzono wpis PNG? Podobnie jak w przypadku aplikacji do iPhone'a, które ładują obraz o złej jakości? Po prostu strzały w ciemności – Touki
Przetestowałem to na 'PHP 5.3.16-1 ~ dotdeb.0' (z Suhosin) z' GD 2.0.34' (2.0.34 kompatybilnym) na moim pudełku Debiana i kiedy uruchomiłem 'imagepng 'przezroczyste części były czarne. Stało się tak, gdy użyłem 'imagecreatefromstring' lub' imagecreatefrompng'. –
Jestem w PHP 5.3.10/GD (zgodny z 2.0.34). – meustrus