[Linuxtrent] Re: bmp, png, ico - html transparence

  • From: aZaZel <azazel@xxxxxxxxxxxxxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Fri, 11 Apr 2003 15:56:31 +0200

>>>>> "Luca" == Luca Manini <manini@xxxxxxxxxxx> writes:

    Luca> Ciao a tutti, ho una applicazione (Winzozz, Delphi) che usa
    Luca> un tot di immagini per l'interfaccia: alcune sono messe in
    Luca> bmp (tante in una sola bmp, tutte affiancate) altre sono
    Luca> file ICO svalangate in una directory.

    Luca> Io devo riciclarle per la "corrispondente" interfaccia Web.
    Luca> Con due righe di Python (PIL) [1] ho riconvertito il tutto
    Luca> (splitting compreso) in una svalangata di filetti PNG, e
    Luca> così andiamo già meglio.

    Luca> Ora però mi resta un problema: nell'interfaccia Winzozz, le
    Luca> immagini erano "trasparenti" (con il trucco che il colore
    Luca> del pixel in basso a sinistra è quello da considerare
    Luca> trasparente, credo).

    Luca> Ho visto che PNG supporta la trasparenza (e mi pare che i
    Luca> browser capiscano abbastanza). Qualcuno sa come si fa
    Luca> (possibilmente in PIL) a "convertire" anche questo bit di
    Luca> informazione?


allora...

il colore trasparente è il colore nero (RGB 0,0,0)  con un canale
alpha anchesso a 0....


io farei così:

codice_RGB_colore_che_deve_diventare_trasparente = c_t = (56,67,75,255)
#                                                          R  G  B  A
import PIL.Image as I

iRGB = I.open('/il_tuo_file.quel_che_vuoi')

# aggiungo canale alpha

iRGBA = iRGB.convert('RGBA')

# qual'è la dimensione dell'immagine?

xsize, ysize = iRGBA.size

# ora applico un filtro sui singoli pixel dell'immagine, cambiando il colore
#di quelli con il "colore trasparente" nel vero colore trasparente con canale
# alpha

x = y = 0 

while x < xmax:
    while y < ymax:
        pix_color = iRGBA.getpixel((x,y))
        if pix_color == c_t:
            pix_color = (0,0,0,0)# il colore trasparente "vero"
            iRGBA.setpixel((x,y),pix_color)
        y += 1

    x += 1


# una volta convertito il colore, salvo l'immagine

iRGBA.save('/outfile.png', 'PNG')




dovrebbe andare


azazel
--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con SOGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: