月曜日, 8月 05, 2024

Photoshopでn%のレイヤーは何枚重ねると100%になる?

例えば、Photoshopで不透明度50%のレイヤーは「何枚重ねると100%になる?」が気になって整理してみました。実は以下の様に過去にも整理していましたが、思い出してプログラムに展開できるように整理してみました。


まずサンプルとして左の色(R:255/G:0/B:255)で塗り潰したレイヤーの不透明度を右のように50%にした場合、何枚複製レイヤーを重ねたら元の100%になるか?です。

実は結果は7枚なのですが・・・
右:元の100%の状態。
左:元のレイヤーも含めて7つのレイヤーの不透明度を50%に設定。

これでカラー状態は・・・
右:(R:255/G:0/B:255)
左:(R:255/G:1/B:255)

と、なりました。そこで、このサンプルから別の不透明度(例えば25%など)なら何枚かを計算してみました。

不透明度50%(つまり透明度50%)の色を重ねたときに、100%不透明になるまでに何枚必要かを計算します。

透明度50%ということは、1枚重ねると50%透過することになります。2枚重ねると、50%の50%(25%)が透過し、75%が不透明になります。n枚重ねると、透明度は次のように計算されます。

透明度 = 0.5^n
不透明度 = 1 − 透明度

※透明度と不透明度を混乱しないことが重要
MS-Officeでは透明度
Adobe CCでは不透明度
透明度25%=不透明度(100%−25%=75%)
不透明度25%=透明度(100%−25%=75%)

これが100%不透明になるためには、透明度が0%になる必要があります。よって以下の式が成り立ちます。

1 − 0.5^n = 1
0.5^n = 0

実際には、完全に透明度が0になることは数学的には無限大枚必要となるので、1%(0.01)。不透明度が100%(0.99)になるための枚数を求めるには・・・

1 − 0.5^n >= 0.99
0.5^n <= 0.01

これを解くために対数を使用します。

n × log10(0.5) <= log10(0.01)
n >= log10(0.01) / log10(0.5)
n >= log(0.01) / log(0.5)
または
n >= ln(0.01) / ln(0.5)
この計算をExcelの関数で実行すると・・・

50%を重ねた場合・・・
=log10(0.01)/log10(0.5) 
=Log(0.01)/log(0.5)
または =ln(0.01)/ln(0.5)
=6.64385619 を四捨五入で整数表記すれば・・・
=7

25%を重ねた場合・・・
=log10(0.01)/log10(0.75)
=Log(0.01)/log(0.75)
または =ln(0.01)/ln(0.75)
=16.0078456 を四捨五入で整数表記すれば・・・
=16

不透明度50%の色を重ねると、100%不透明に近づくためには約6.64385619枚必要になります。
ただし、実際には色の重ねる枚数は整数なので、7枚重ねるとほぼ完全に不透明(99%以上)になります。

■計算まとめ
50%を重ねた場合
6枚重ねると約98.4375%不透明。
7枚重ねると約99.2188%不透明。
したがって、7枚重ねることで実質的に100%不透明にすることができます。 ​​

Excelで確認しても7枚と言うことが解りました。

Visdual Studio 2022のBasicで作成しています。
TintColor_100.zip
クリックするといきなりダウンロードが始まります。
実際のプログラム完成日は2024年8月2日です。
Windows版です。
解説は以下です。