3
如何使用PIL在透明背景中转换PNG或JPG图像的所有白色背景和白色元素?使用PIL的透明背景的白色背景python
如何使用PIL在透明背景中转换PNG或JPG图像的所有白色背景和白色元素?使用PIL的透明背景的白色背景python
使用numpy,以下使白色区域透明。您可以更改threshold
和dist
以控制“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
我了解阈值,但是您能否在此解释距离的用途? – kangax 2011-10-09 16:47:35
@kangax:通过降低'dist',您可以确保您只消除浅灰色。 – unutbu 2011-10-10 10:01:40
啊......说得通! #000,#555,#aaa,ccc,#eee,#fff都是灰色阴影(距离= 0),所以灰色颜色的距离越小。谢谢。 – kangax 2011-10-10 21:18:31