透明な背景に白いアイコンのセットがあります。透明な背景にすべてを反転させたいと思います。Python:透明な背景を持つ反転イメージ(PIL、Gimp、...)
は、PIL(ImageChops)で試してみましたが、透明な背景で動作するようには思えません。私もGimpのPythonインターフェイスを試しましたが、そこには運がありません。
どのように反転がPythonでどのように達成されるのでしょうか?
透明な背景に白いアイコンのセットがあります。透明な背景にすべてを反転させたいと思います。Python:透明な背景を持つ反転イメージ(PIL、Gimp、...)
は、PIL(ImageChops)で試してみましたが、透明な背景で動作するようには思えません。私もGimpのPythonインターフェイスを試しましたが、そこには運がありません。
どのように反転がPythonでどのように達成されるのでしょうか?
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')
独自の '' invert() ''を定義するのではなく、各チャンネルが '' L "'型を持っているので '' ImageOps.invert() ''を各チャンネルで使うことができます。 (または私は 'ImageChops.invert()'と思っていますが、自分自身でそれをテストしたことはありません)。 – Ray
を私はどんぐりのアプローチを試してみましたが、結果は(下の画像の上の部分)やや奇妙です。
下のアイコンは、私が本当に欲しかったものですが、私はImage Magick年代を使用することによって、それを達成する方法変換:
convert tools.png -negate tools_black.png
(それ自体はPythonのが、Pythonのラッパーが存在し、好きではないがPythonMagickWand
唯一の欠点は、ImageMagickを動作させるためにたくさんの依存関係をインストールする必要があることですが、強力なイメージマニフェストpulationフレームワーク。
私が投稿したコードは、白いピクセルを黒に変換するだけでした。私はジェネリックインバージョンで私の答えを更新しました。 – Acorn
あなたはこのように、PIL
で非常に簡単にこれを行うことができます。
convert('RGBA')
を使用することにより、RGBA
として表現されていることを確認します。RGBA
バンド。RGB
バンドに何をしたいのですか(あなたの場合は、point
関数を使用してすべてを黒に設定します)、アルファバンドには触れないでください。相続コード:
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')
はそれに打撃を与えます。
import Image, numpy
pixels = numpy.array(Image.open('myimage.png'))
pixels[:,:,0:3] = 255 - pixels[:,:,0:3] # invert
Image.fromarray(pixels).save('out.png')
おそらく最も速い解決策です。これは、「各ピクセルごとに」ループ内のPythonコードを解釈しないためです。
イメージはどのような形式ですか? – Acorn
ファイル形式はpng – Hoff