見出し画像

フォトショ使いなら余裕?アルファ合成クイズ


問題

透明画像に、「赤色の透明度50%」と「青色の透明度50%」を重なるように塗った場合、重なった部分の透明度はいくつになる?

画像1

答え

画像2

アルファブレンディングの実装によりますよね。


一般的な実装

画像3

合成後のアルファの値は、50% + 50% × (100% - 50%) = 75% となる。


PhothoshopとPythonで確認

赤色の透明度50%で塗る
青色の透明度50%で塗る
アルファチャンネル(透明チャンネル)付きPNGファイルに出力
Pythonでアルファチャンネルを確認する
75.29411764705883%になった
(たぶん、もっと簡単な確認方法があるはず)

import numpy as np
from PIL import Image


im = Image.open("red_blue_50percent.png", 'r')
alpha = im.split()[-1]

print(im)
display(im)

display(alpha)
data = np.asarray(alpha)

print(data)

print(str(data[0][0] / 255 * 100) + "%")
<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=16x16 at 0x254FFD05988>

[[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]
[192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192]]

75.29411764705883%


わざわざ、内部の数字など意識しないで、透明な色を重ねれば、透明度が下がる、と直観的に考えますよね。
CLIP STUDIO PAINTのレイヤーマスクがアルファチャンネル(透明色)を利用していて、色を重ねて、目的の値にするのが難しいので、ふと考えてみました。




この記事が気に入ったらサポートをしてみませんか?