[Python] Aiuto PIL

Giovanni Vittorio Spina vittorio.spina a gmail.com
Mar 23 Lug 2013 09:40:04 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 :)
> 
Però il degradamento non è così decisivo... Sugli schermi non perdo le informazioni del colore. Le immagini a prima vista sono come le jpg da cui le ricavo con quella funzione
Vittorio


Maggiori informazioni sulla lista Python