[Python] Aiuto PIL

Roberto De Ioris roberto a unbit.it
Mar 23 Lug 2013 09:19:27 CEST


>
>> 2013/7/22 Carlo Miron <miron a python.it>
>>> Il 22 luglio 2013 20:22, Marco Beri <marcoberi a gmail.com> ha scritto::
>>>
>>> > On Mon, Jul 22, 2013 at 6:15 PM, Vittorio Spina
>>> <vittorio.spina a gmail.com>
>>> > wrote:
>>> >>
>>> >> def TranlsateImage(im):
>>> >>     stringImage=bytes()
>>> >>     for pixel in list(im.getdata()):
>>> >>         H=(pixel[2]&248)|pixel[1]>>5
>>> >>         L=((pixel[1]<<3)&224)|pixel[0]>>3
>>> >>         stringImage+=struct.pack('<B',H)
>>> >>         stringImage+=struct.pack('<B',L)
>>> >>     return stringImage
>>> >> alla quale passo una immagine PIL come argomento (im).
>>> >
>>> >
>>> > La funzione, ad un primo sguardo, sembra degradare l'immagine.
>>> >
>>> > L'istruzione H=(pixel[2]&248)|pixel[1]>>5 nei fatti azzera i 3 bit
>>> meno
>>> > significativi di pixel[2] (che credo sia la componente blu del
>>> pixel).
>>>
>>> Premetto che non conosco l'API di PIL, ma la scelta delle lettere mi
>>> fa pensare piu` alla codifica HSL_ che a quella RGB.
>>
>> Io invece credo che il tizio che ha scritto la funzione volesse
>> compattare le tre componenti di un pixel (getdata ritorna RGB) in due
>> byte chiamati High e Low.
>>
> Allora, può essere che la funzione degradi le immagini, ma non si può far
> meglio perchè quelle immagini vanno su un device che le piglia così e le
> renderizza su dei micromonitors oled.
> Quello che mi piacerebbe è avendo il formato ritornato dalla funzione,
> riuscire a salvare un jpg 64x48 (questa è la dimensione delle immagini) in
> modo da rendere disponibile un preview dal programma utente che pilota il
> microcontrollore. Spero di essermi spiegato.
> Grazie
>
>

Se non e' codifica HSL, ed effettivamente stai convertendo ogni pixel in 2
bit (quindi con 4 valori di "grigio") ti e' sufficiente assegnare un
valore rgb a ognuno dei 4 valori e ricostruire la bitmap, tipo:

# black
color[0] = (0,0,0)
# white
color[1] = (255, 255, 255)
...

new_bitmap = []
for pixel in device_bitmap:
    new_bitmap.append(color[pixel][0])
    new_bitmap.append(color[pixel][1])
    new_bitmap.append(color[pixel][2])

non so se mi sono spiegato :)


-- 
Roberto De Ioris
http://unbit.it


Maggiori informazioni sulla lista Python