職業プログラマの休日出勤

職業プログラマによる日曜自宅プログラミングや思考実験の成果たち。リアル休日出勤が発生すると更新が滞りがちになる。記事の内容は個人の意見であり、所属している(いた)組織の意見ではない。

opacity、transparency そして alpha

今回は色の話です。

透明に関わる3つの言葉、opacity, transparency, そして alpha。
これらの意味、きちんと把握できていますか?

筆者は、できていませんでした。
反省の気持ちもこめて、ここにメモしておきたいと思います。

思い込み

次のように思い込んでいました。※部分的に誤りです!

  • opacity : 不透明度。値が増えると不透明、値が0だと透明。
  • transparency : 透明度。一般的な画像処理でtransparencyの値を指定することは無いが、もしも指定できるならopacityの逆となり、値が増えると透明。
  • alpha : 透明度で、意味はtransparencyと同じ。但しこちらは画像処理の場面で値を指定することは多い。


さて、実際はどうなのでしょう。

opacity

意味は上記の思い込みの内容で合っています。但し、opacityを数値で指定するようなAPIはあんまり無いかも。
覚えにくい!という人は、 opaque という英語の形容詞も一緒に覚えておくとスッキリするでしょう。
opaqueの意味は「不透明な」とか「不明瞭な」とか。

transparency

これも、上記の思い込みの内容で正解です。
知らなかった人は transparent という英語の形容詞も一緒に知っておくと良いでしょう。
opaque よりも知ってる人は多いですよね?きっと。
CSSの色指定にも transparent ってあるし。
意味はもちろん「透けて見える」とか「透明な」とかです。

alpha

筆者は、これの意味を勘違いしていました。
alphaは上記の2語、opacityとtransparencyのように元々英単語として存在した語とは違って、コンピュータグラフィックスの世界でしか用いられない語です。そしてご想像の通り、そもそもalphaという語そのものには「透明」とか「不透明」といった意味はありません。

じゃあalphaの値が増えたら透明になるの?不透明になるの?という話ですが、これは不透明になるというのが正解です。無理矢理日本語に訳すとしたら「不透明度」ということになります。opacityと同じになりますね。

一方で、日本語の「不透明度」を英語に訳すときにopacityとalphaのどちらを使うべきか?という話になると、通常はどちらも正解でしょう。ただし前述の通りalphaはコンピュータグラフィクスの用語であって、一般人に通じるかどうかと言われると激しく疑問ですので、一般人向けの文書やUIの中であればopacityの方が適切でしょう。また、画像合成の手法が alpha composition (詳細は後述のリンクへ)ではない場合に alpha という表現を使うのは間違いである可能性もあります。この意味でもopacityの方が適切であると言えます。

なんでalphaはalphaと言うの?

ggrks

というのは冗談ですが、実際のところは、筆者もよくわかってません。
アルファチャネルを使った画像合成手法を発展させた功労者 Thomas Porter, Tom Duff 両氏の論文の中でも

Let us call this an alpha channel

http://keithp.com/~keithp/porterduff/p253-porter.pdf

と書かれていて、語源については触れられていません。もしかすると見落としているだけかもしれませんが(※全文は読んでない)。。

参考リンク

アルファチャンネル - Wikipedia
Alpha compositing - Wikipedia
※英語版のWikipediaの方が詳しいです。

本の紹介

CoreGraphics, CoreAnimation, CoreImage などの解説書です。
2013年5月の本ということもあってiOS6系をターゲットにした書籍ですが、ここで得られる知識はiOS7でも十分に活かされます。


Mac版C言語で学ぶ実践画像処理

Mac版C言語で学ぶ実践画像処理

高校生の頃、これで画像処理を学びました。もう今となってはほとんど覚えていませんが(苦笑)。とにかく画像処理のためには本気で数学を勉強しないといけないんだな、ということは理解できました。
Amazonでさえ表紙画像が登録されていないような本です。発行は1994年だそうです。