2011-12-08 28 views
8

¿Cómo crear una imagen con GDlib con un fondo transparente?Cómo crear una imagen con fondo transparente

header('content-type: image/png'); 

$image = imagecreatetruecolor(900, 350); 

imagealphablending($image, true); 
imagesavealpha($image, true); 

$text_color = imagecolorallocate($image, 0, 51, 102); 
imagestring($image,2,4,4,'Test',$text_color); 

imagepng($image); 
imagedestroy($image); 

Aquí el fondo es negro

+0

usted tiene que usar 'imagefill' y rellenar con el color asignado que (imagecolorallocatealpha) que tienen el alfa establecido a 0. –

+0

@noice, crear una respuesta .. que funciona – clarkk

+0

@NoICE: asignar el color no es necesario , es una imagen en color verdadero. – mvds

Respuesta

7

usted tiene que utilizar imagefill() y rellenar con el color asignado que (imagecolorallocatealpha()) que han puesto a 0. alfa

Como dijo @mvds, "Asignación no es necesario", si se trata de una imagen de color verdadero (24 o 32 bits) es solo un número entero, por lo que puede pasar ese entero directamente al imagefill().

Lo que hace PHP en el fondo de las imágenes de color verdadero al llamar a imagecolorallocate() es lo mismo, simplemente devuelve ese número entero calculado.

21

añadir una línea

imagefill($image,0,0,0x7fff0000); 

algún lugar antes de la imagestring y será transparente.

0x7fff0000 se descompone en:

alpha = 0x7f 
red = 0xff 
green = 0x00 
blue = 0x00 

que es totalmente transparente.

+0

Has hecho mi día :) ¡Gracias! –

8

Algo como esto ...

$im = @imagecreatetruecolor(100, 25); 
# important part one 
imagesavealpha($im, true); 
imagealphablending($im, false); 
# important part two 
$white = imagecolorallocatealpha($im, 255, 255, 255, 127); 
imagefill($im, 0, 0, $white); 
# do whatever you want with transparent image 
$lime = imagecolorallocate($im, 204, 255, 51); 
imagettftext($im, $font, 0, 0, $font - 3, $lime, "captcha.ttf", $string); 
header("Content-type: image/png"); 
imagepng($im); 
imagedestroy($im); 
+0

Esto hizo que mi fondo transparente blanco en lugar de negro :( – Bolas

1

En algún momento usted no va a obtener una imagen transparente debido a problemas de imagen PNG en. La imagen debe estar en uno de los siguientes formatos recomendados:

PNG-8 (recommended) 
Colors: 256 or less 
Transparency: On/Off 
GIF 
Colors: 256 or less 
Transparency: On/Off 
JPEG 
Colors: True color 
Transparency: n/a 

La función imagecopymerge no maneja adecuadamente las imágenes PNG-24; por lo tanto, no es recomendable.

Si está usando Adobe Photoshop para crear imágenes de marca de agua, se recomienda que utilice "Guardar para Web" comando con la siguiente configuración:

File Format: PNG-8, non-interlaced 
Color Reduction: Selective, 256 colors 
Dithering: Diffusion, 88% 
Transparency: On, Matte: None 
Transparency Dither: Diffusion Transparency Dither, 100% 
6

esto debería funcionar:

$img = imagecreatetruecolor(900, 350); 

$color = imagecolorallocatealpha($img, 0, 0, 0, 127); //fill transparent back 
imagefill($img, 0, 0, $color); 
imagesavealpha($img, true); 
4

Esto debería funcionar. Esto ha funcionado para mí.

$thumb = imagecreatetruecolor($newwidth,$newheight); 
$transparent = imagecolorallocatealpha($thumb, 0, 0, 0, 127); 
imagefill($thumb, 0, 0, $transparent); 
imagesavealpha($thumb, true); 
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 
imagepng($thumb, $output_dir); 
+0

código sólo respuestas enviaban anima, ya que no proporcionan mucha información para los futuros lectores proporcione una explicación a lo que ha escrito – WhatsThePoint

+0

La función 'imagesavealpha()' salvado mi día. Documentación dice : 'configura la bandera para intentar guardar la información completa del canal alfa (a diferencia de la transparencia de un solo color) al guardar imágenes PNG –

Cuestiones relacionadas