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