概要
タイトルの通りです。**「適当な単一色の画像を同じアルファ値でアルファブレンドしただけだと容易に突破される」**ということを警告するために作りました。
言うまでもありませんが、悪用厳禁でお願いいたします。
動作原理
アルファブレンドは、元の色を$X$、重ねあわせるマスクの色を$Y$、マスクを重ねた結果を$Z$、アルファ値(1で不透過)を$A$とした際、$Z=(1-A)X+AY$といった式で表されます。ここで、未知の変数は$A$と$Y$ですので、$[X,Z]$の組を2つ用意すれば逆算できてしまいます。また、これを利用すれば、$[A,Y,Z]$から$X$を算出することも可能です。後は……お分かりですね?
実装
とりあえずJavaで書きました。理由はこの記事と同じく、「画像もGUIもイケるしHSPで書かなくてもいいから」といった感じです。
結果
プロ生ちゃんをサンプルにしたところこんな感じ。もちろん推定に失敗することも多いので、上手くサンプルとなる色の組を考えるのがコツかと(あまり画素値が0や255に近いと推定しづらい)。
元画像
マスク位置
処理成功例
処理失敗例
配布先URL