2011-03-19 190 views

回答

5

使用numpy,以下使白色區域透明。您可以更改thresholddist以控制「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') 

該代碼很容易修改,因此只有RGB值(255,255,255)變爲透明 - 如果這是您真正想要的。只需將mask更改爲:

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

我瞭解閾值,但是您能否在此解釋距離的用途? – kangax 2011-10-09 16:47:35

+0

@kangax:通過降低'dist',您可以確保您只消除淺灰色。 – unutbu 2011-10-10 10:01:40

+0

啊......說得通! #000,#555,#aaa,ccc,#eee,#fff都是灰色陰影(距離= 0),所以灰色顏色的距離越小。謝謝。 – kangax 2011-10-10 21:18:31