こんにちは、エンジニアのさもです。
先日デザイナーさんに、透過PNGってどうやって作ってるんですか?って聞いたところ、「Photoshop使ってます」と言っていました。
有料やんけ・・・
透過ぐらいならpythonで書いてしまおうと、スクリプトを書いてみました。
スポンサーリンク
はじめに
今回の目的は以下の画像を透過PNGに変換することです。
普通に白色だけ透過にしてしまうと、(255,255,254)のように少しでもずれると透過の対象外になってしまいます。
よくみるガビガビの透過PNGですね。
なので今回は、RGBの平均を取って、平均値が250より大きければ透過の対象としています。
実装
from PIL import Image, ImageDraw import numpy as np def select_color(color): mean = np.array(color).mean(axis=0) return (255,255,255,0) if mean >= 250 else color def to_touka(img): w, h = img.size touka_img = Image.new('RGBA', (w, h)) np.array([[touka_img.putpixel((x, y), select_color(img.getpixel((x,y)))) for x in range(w)] for y in range(h)]) return touka_img #画像の読み込み filename = "samo.jpg" original_img = Image.open("../images/" + filename).convert("RGB") #透過画像へ変換して保存 to_touka(original_img).save("./" + filename.split(".")[0] + ".png")
- select_color(color)メソッドは、引数の色に応じて、透過かそのまま表示かを返しています。
- to_touka(img)メソッドは、そのままですが、引数の画像を元に透過画像を作成して返しています。
- filenameへ一旦ファイル名を格納しているのは、保存時に同じ名前で拡張子がpngのものにするためです。
- filename.split(".")でファイル名と拡張子を分けて、ファイル名だけを抜き出しています。
実行
python touka.py
で実行してください。
同じフォルダにsamo.pngというファイルができました。
(注)分かりやすいように背景色をつけています
最後に
実際にデザイナーさんがphotoshopで作成したものと見比べても遜色無かったです。
透過したいだけでphotoshop使うのは大げさだな~と感じているかたは是非試してみてください。
読者登録をしていただけると、ブログを続ける励みになりますので、よろしくお願いします。