He estado tratando de hacer que la transparencia funcione con mi aplicación (que cambia el tamaño de las imágenes dinámicamente antes de almacenarlas) y creo que finalmente reduje el problema después de mucha mala dirección imagealphablending
y imagesavealpha
. ¡La imagen de origen nunca se carga con la transparencia adecuada!PHP GD imagecreatefromstring descarta transparencia
// 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);
Sería una dificultad arquitectónica seria cargar la imagen de un archivo; este código se usa con una API JSON que se consulta desde una aplicación de iPhone, y es más fácil en este caso (y más consistente) cargar imágenes como cadenas codificadas en base64 en los datos POST. ¿Tengo absolutamente necesito para almacenar de alguna manera la imagen como un archivo (solo para que PHP pueda cargarla en la memoria de nuevo)? ¿Existe alguna forma de crear un Stream desde $fileData
que se pueda pasar al imagecreatefrompng
?
No se puede reproducir el problema en 'PHP 5.3.10/GD 2.0', Funcionando bien. ¿Qué versiones estás usando? Podría provenir de otra cosa. ¿Entrada corrupta a PNG? ¿Cómo la aplicación de iPhone carga una imagen de mala calidad? Solo tomas en la oscuridad – Touki
Probé esto en 'PHP 5.3.16-1 ~ dotdeb.0' (con Suhosin) con' GD 2.0.34' (compatible con 2.0.34) en mi caja de Debian, y cuando ejecuté 'imagepng 'las partes transparentes eran negras. Esto sucedió cuando usé 'imagecreatefromstring' o' imagecreatefrompng'. –
Estoy en PHP 5.3.10/GD (compatible con 2.0.34). – meustrus