2010-07-06 3 views
1

Quelle serait la meilleure bibliothèque basée sur python pour générer une palette 8 bits à partir du fichier .png donné. Comme dans photoshop générant sous format .pal. PS: L'entrée PNG est déjà au format 8 bits. (Palettisées)Génération de la palette 8 bits à partir du fichier png via Python

Cordialement

+0

Est-ce que le fichier png est déjà palettisé? Ou est-ce en couleur vraie? – slurdge

+0

J'ai modifié la question pour clarification. – Hellnar

+0

Ce n'est pas génératrice du tout; c'est juste "extraire". – Nyerguds

Répondre

2

Je n'ai pas trouvé de spécification pour .PAL (Photoshop l'appelle "Microsoft PAL"), mais le format est facilement réversible. Cela fonctionne:

def extractPalette(infile,outfile): 
    im=Image.open(infile) 
    pal=im.palette.palette 
    if im.palette.rawmode!='RGB': 
     raise ValueError("Invalid mode in PNG palette") 
    output=open(outfile,'wb') 
    output.write('RIFF\x10\x04\x00\x00PAL data\x04\x04\x00\x00\x00\x03\x00\x01') # header 
    output.write(''.join(pal[i:i+3]+'\0' for i in range(0,768,3))) # convert RGB to RGB0 before writing 
    output.close() 
+0

fonctionne comme un charme, merci foone! – Hellnar

1

Si c'est une image palletted alors vous pouvez utiliser la méthode getcolors() une fois que vous l'avez chargé dans PIL. S'il s'agit d'une image RVB ou RVBA, vous devez effectuer une réduction de couleur jusqu'à ce que vous disposiez de 256 couleurs au maximum.

+0

merci pour la suggestion Ignacio, qu'en est-il de générer une version .pal palette de cette méthode? Salutations – Hellnar

+0

Je n'ai aucune idée de ce à quoi ressemble ce format de fichier. Je soupçonne que vous aurez besoin d'utiliser finalement 'struct'. –

Questions connexes