2011-03-19 7 views

Répondre

5

En utilisant numpy, ce qui suit rend les zones blanches transparentes. Vous pouvez modifier threshold et dist pour contrôler la définition de "white-ish".

import Image 
import numpy as np 

threshold=100 
dist=5 
img=Image.open(FNAME).convert('RGBA') 
# np.asarray(img) is read only. Wrap it in np.array to make it modifiable. 
arr=np.array(np.asarray(img)) 
r,g,b,a=np.rollaxis(arr,axis=-1)  
mask=((r>threshold) 
     & (g>threshold) 
     & (b>threshold) 
     & (np.abs(r-g)<dist) 
     & (np.abs(r-b)<dist) 
     & (np.abs(g-b)<dist) 
    ) 
arr[mask,3]=0 
img=Image.fromarray(arr,mode='RGBA') 
img.save('/tmp/out.png') 

Le code est facile à modifier de sorte que seule valeur RVB (255,255,255) est activé transparent - si c'est ce que vous voulez vraiment. Il suffit de changer le mask pour:

mask=((r==255)&(g==255)&(b==255)).T 
+0

Je comprends seuil, mais pouvez-vous expliquer le but de la distance ici? – kangax

+0

@kangax: En abaissant le 'dist', vous pouvez vous assurer que vous n'éliminez que les couleurs grisâtres. – unutbu

+0

Ahh ... c'est logique! # 000, # 555, #aaa, ccc, #eee, #fff sont toutes les nuances de gris (distance = 0), donc moins les couleurs sont grises. Merci. – kangax