web-dev-qa-db-ja.com

PIL(Python-Imaging)で画像の色を反転する方法は?

黒の背景文字に白で描かれた一連の画像を、白と黒が反転した画像(負の画像)に変換する必要があります。 PILを使用してこれを達成するにはどうすればよいですか?

43
bialix

ドキュメントから次のことを試してください。 http://effbot.org/imagingbook/imageops.htm

from PIL import Image
import PIL.ImageOps    

image = Image.open('your_image.png')

inverted_image = PIL.ImageOps.invert(image)

inverted_image.save('new_name.png')

注:「ImageOpsモジュールには、いくつかの「既製」の画像処理操作が含まれています。このモジュールは多少実験的であり、ほとんどのオペレーターはLおよびRGB画像でのみ動作します。」

65
Gary Kerr

画像がRGBA透明の場合、これは失敗します...これは動作するはずです:

from PIL import Image
import PIL.ImageOps    

image = Image.open('your_image.png')
if image.mode == 'RGBA':
    r,g,b,a = image.split()
    rgb_image = Image.merge('RGB', (r,g,b))

    inverted_image = PIL.ImageOps.invert(rgb_image)

    r2,g2,b2 = inverted_image.split()

    final_transparent_image = Image.merge('RGBA', (r2,g2,b2,a))

    final_transparent_image.save('new_file.png')

else:
    inverted_image = PIL.ImageOps.invert(image)
    inverted_image.save('new_name.png')
27
Dave

「1」モード(つまり、1ビットピクセル、白黒、バイトごとに1ピクセルで保存されている- のドキュメント を参照)で画像を操作している場合は、 PIL.ImageOps.invertを呼び出す前に「L」モードに変換します。

したがって:

im = im.convert('L')
im = ImageOps.invert(im)
im = im.convert('1')
16
Greg Sadetsky