Libreria PIL
Marcos Sánchez Provencio
rapto en arrakis.es
Jue Nov 27 14:45:32 CET 2003
Creo que está corregido en la última versión de PIL. Si no, éste es el
parche:
http://mail.python.org/pipermail/python-list/2001-March/034670.html
Marcos Sánchez Provencio wrote:
> Is it possible to set a transparent color in a GIF file (originally not
> transparent) in PIL?
>
With PIL 1.0, not directly. For later versions (if they exist), I don't
know.
You can patch the PIL 1.0 version of 'GifImagePlugin.py' as follows:
############
--- GifImagePlugin.py Thu May 4 11:15:49 2000
+++ /tmp/GifImagePlugin.py Thu Mar 22 17:57:43 2001
@@ -303,6 +303,12 @@
for i in range(256):
s.append(chr(i) * 3)
+ # save transparency
+ if im.info.has_key('transparency'):
+ transparentIndex = im.info['transparency']
+ s.append('!' + chr(0xf9) + chr(4) + chr(1) + chr(0) + chr(0) +
+ chr(transparentIndex) + chr(0))
+
return s
def getdata(im, offset = (0, 0), **params):
############
Then, if you know the index of the colour in the GIF's palette you can say:
>> image = Image.open('my.gif')
>> transparent_colour_index = 4
>> image.info['transparency'] = transparent_colour_index
>> image.save('my_transparent.gif')
-Steve
--
Steve Purcell, Pythangelist
Gema Núñez Blázquez wrote:
> Hola lista, escribo porque tengo una duda a cerca de la libreria PIL. Mi
> problema es muy sencillo pero no se porque me pasa:
> Abro una imagen que tiene el fondo transparente y formato GIF. Lo abro
> en modo RGBA es decir RGB + Transparente (aunque he probado con otros
> modos y nada)
> Luego lo salvo con otro nombre en formato GIF.
>
> El problema es que cuando veo el fichero de salida me ha convertido el
> fondo transparente en negro y no se porque, alguna pista por favor.
>
> He imprimido por pantalla la informacion de la imagen y me dice que
> tiene modo RGBA, transparency 0 y background 0, he probado a darle valor
> 1 a los atributos transparency y background (en distintas
> combinaciones) y tampoco
>
> def abrirMapa(self,rutaGIF):
> im=Image.open(rutaGIF)
> im2=im.convert('RGBA')
> return im2
>
> def escalar(self,rutaGrafico):
> imEntrada=self.abrirMapa(rutaGrafico)
> print 'modo imEntrada '+str(imEntrada.mode)
> if imEntrada.info.has_key("transparency"):
> print 'tiene tranasparencia '
> print str(imEntrada.info)
> #imEntrada.info["transparency"]=1
> #imEntrada.info["background"]=1
> #print 'pallete.mode '+str(imEntrada.palette.mode)
> else:
> print 'no tiene transparencia '
> imEntrada.save('salida.gif',"GIF")
>
> Gracias por anticipado
Más información sobre la lista de distribución Python-es