2012-07-14 3 views
5

나는 투명 배경에 흰색 아이콘 세트가 있으며, 모두 투명 배경에 검정색으로 반전시키고 싶습니다. Python : 투명 배경 (PIL, Gimp 등)이있는 이미지 반전

enter image description here

는 PIL (ImageChops)을 시도했지만 투명 배경과 함께 작동하지 않습니다. 저는 또한 Gimp의 Python 인터페이스를 사용해 보았습니다.하지만 거기에는 운이 없었습니다.

파이썬에서 어떻게 반전이 가장 잘 이루어 집니까?

+0

이미지의 형식은 무엇입니까? – Acorn

+0

파일 형식은 png – Hoff

답변

5

ImageChops.invert 또한 각 픽셀의 알파 채널을 뒤집을 수 있습니다.

은 작업해야한다 : 나는 도토리의 접근을 시도

import Image 

img = Image.open('image.png').convert('RGBA') 

r, g, b, a = img.split() 

def invert(image): 
    return image.point(lambda p: 255 - p) 

r, g, b = map(invert, (r, g, b)) 

img2 = Image.merge(img.mode, (r, g, b, a)) 

img2.save('image2.png') 
+0

자신의'invert()'를 정의하는 대신에, 각 채널은''L ''형을 가지고 있기 때문에 각 채널에서''ImageOps.invert()'를 사용할 수 있습니다. (또는 나는'ImageChops.invert()'라고 생각하지만 나는 결코 그것을 테스트하지 않았다). – Ray

1

,하지만 결과는 (아래 이미지의 상단 부분) 다소 이상하다.

enter image description here

하단 아이콘은 정말 내가의 변환 Image Magick '을 사용하여 달성, 원하던 방법 :

convert tools.png -negate tools_black.png

(안 파이썬 자체하지만, 파이썬 래퍼 같은 존재 PythonMagickWand

유일한 단점은 ImageMagick을 작동 시키려면 많은 종속물을 설치해야하지만, 강력한 이미지 마니 인 것 같습니다. 퓨전 프레임 워크.

+0

맞습니다. 게시 한 코드는 흰색 픽셀 만 검정색으로 변환하는 코드였습니다. 제 답변을 일반적인 반전으로 업데이트했습니다. – Acorn

0

이 같은 PIL로 아주 쉽게이 작업을 수행 할 수 있습니다

  1. 이미지가 convert('RGBA')를 사용하여, RGBA로 표시되어 있는지 확인합니다.
  2. 이미지를 분리하여 RGBA 개의 밴드로 분리합니다.
  3. RGB 개의 밴드로 원하는 것을 수행하십시오 (귀하의 경우에는 point 함수를 사용하여 모두 검정색으로 설정 함).하지만 알파 밴드는 만지지 마십시오.
  4. 밴드를 다시 병합합니다.

을 heres 코드 :

import Image 
im = Image.open('image.png') 
im = im.convert('RGBA') 
r, g, b, a = im.split() 
r = g = b = r.point(lambda i: 0) 
im = Image.merge('RGBA', (r, g, b, a)) 
im.save('saved.png') 

이에게 기회를 제공합니다.

0
import Image, numpy 
pixels = numpy.array(Image.open('myimage.png')) 
pixels[:,:,0:3] = 255 - pixels[:,:,0:3] # invert 
Image.fromarray(pixels).save('out.png') 

아마도 "지금까지 가장 빠른 해결책은"각 픽셀에 대한 루프 내에서 파이썬 코드를 해석하지 않기 때문입니다.