Белый фон на прозрачный фон с использованием PIL Python - PullRequest
4 голосов
/ 20 марта 2011

Как я могу преобразовать весь белый фон и белые элементы изображения png или jpg в прозрачный фон, используя PIL?

1 Ответ

5 голосов
/ 20 марта 2011

Используя numpy, следующее делает прозрачные области белого цвета.Вы можете изменить threshold и dist, чтобы управлять определением «белого цвета».

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
...