おたくのテクノ

ピアノ男(notピアノ弾き)のブログ

pngのアルファチャンネルの2値化(python)その1

Tシャツプリントのデータを入稿する時の話。

印刷方法によっては、アルファチャンネルが含まれている画像を入稿する際に、半透明な部分(不透明度1%〜99%)があると希望通りの仕上がりにならない場合があるGIMPとかだとアルファチャンネルを2階調化できるような機能があるようだが、Photoshopだとピンポイントでそういうのはなさげなので面倒。

Photoshopユーザなので、いちいちGIMPを入れるのも馬鹿らしい。そこで、Pythonとその画像処理ライブラリPIL/Pillowを使ってやる。

ソースは以下

pngのアルファチャンネルを2値化

getpixelすると、当該座標のRGBAがそれぞれ配列に格納される(Aなら4番目)。アルファ値が255未満ならRGBA全部ゼロのpixelに置き換える。それだけ。

単純に半透明なのを全部完全透明にしてるだけなので、アンチエイリアスを消す程度なら構わないが、例えば半透明で塗りつぶされたデザインだとガッツリ消えてマズい。閾値を変えるとかピクセル周辺の状況に合わせてアレするとかする必要がある。がめんどくさいのでその時が来たらやる。

あと、getpixel/putpixelはクソ時間がかかる。その点については高速で置換する方法を載せてる方がいる。

qiita.com

次回はこれを参考にやる。