Webはlossy+alphaを手に入れられるのか

Chrome Canary(今のところM30)でアルファチャネル付きWebMが実験的にサポートされたとのこと。

ビデオ見ると妙な気味悪さがあって面白い。ドラッグ&ドロップしたり背景変えたりね。静止画だとふつうにできてたことが動画でもできると、世界広がるんだって思った。映像つくるの大変そうだけど。

って、これ静止画でもまだできてないのか。少なくともWebには、非可逆圧縮+アルファチャネルがないんだった。というわけで、ちょっと思い出したことを書こうかと。

非可逆圧縮+アルファチャネル

Webで透過する画像フォーマットといえば、GIFかPNGになる。どちらも可逆圧縮なので、写真みたく色数が多くなりがちなものには適さないとされている(GIFは色数にけっこうな制限もあるし)。Web開発でも多分長らく、「写真はJPEG」とされているはず。

ただ一部を透過させた写真を作りたいとき、JPEGだと透過させられない。でも、使いたいことって、けっこうあるんじゃないかなあ。

ワークアラウンドとしては、重ねたい背景を含めた写真として切り出す、切なくなりながら透過PNGで書きだす、とかだろうか。前者は背景と固定しないといけないし使い勝手が悪い。後者はファイルサイズが大きくなる。

ただ、他に方法がないので、透過PNGを使っているケースがある。たとえばApple。製品ページで、製品画像(写真)を透過PNGにしている。ただ、やはりいい方法ではないと思っていたのか、製品画像とマスク用の透過PNG画像を用意しCanvasで合成する、なんてこともやっていた。すごい。でもこういう、スマートさが求められる状況はどうにかならないものか。

非可逆圧縮でアルファチャネルを持つ画像フォーマット、その中でWebに近めなのが、JPEG XRとWebPだろう。

JPEG XR

JPEG XRは、MicrosoftがWindows Media Photoとして開発して、HD Photoと名前変えて、それをJPEG(グループの方)と組んでJPEG XRにして、ITUに提出して、ISOにも提出して標準にしたっていう、がんばった規格。

機能としては、アルファチャネルのほか、圧縮率とか色とかハイダイナミックレンジとかそこらがよくなっているらしい。あと可逆圧縮もできるようになったと。すごい。

Microsoftがつくった規格なので、新しめのWindowsでは当然サポートしている。Internet ExplorerIE9からサポートしている。IE9+べったりな環境であれば、もう使える。そんなのがあるのかは知らない。

他のエンジンはどうだろう。まずBlink (Chrome) では2010年にissueが上がったけれど、とくにChromiumな人からの反応はない。マイルストーンもX(未定)にされている。JPEG XR is a <strong>standard<strong>なんてコメントがあるけれど、MNGとかJPEG 2000とかについても言ってあげなよ(´ー`)…

続いてWebKit2010年末のメールによると、画像のデコーダがプラットフォームごとによって違うことや、Mozillaの動向が読めないなどを挙げて、すぐにサポートすることはないと見解を出している。書いてるのがChrome teamのEric Seidelなので、Blinkでも同じような話になるのだろうか。

ではMozillaはどうか。過去の議論を見ると、もうちょっと突っ込んだ話になっている。

Bugzillaでは、公開されているライブラリのソースコードについてライセンス・特許に関する懸念が示されている(過去にJPEGについてあったらしい特許係争を回避する目的で含まれてると推測されている)。あとは、リファレンス実装のパフォーマンス(試したらlibjpegの10倍遅かったらしい)やセキュリティに対する懸念もあると。

mozilla.dev.platformでは、2011年のTPACにてMicrosoftからMozillaにコンタクトがあったことから議論が始まっている。ライセンスに関する懸念は引き続き課題として出ているものの、MicrosoftがJPEG XRをWebの新しいフォーマットにしたいという思いがあることもあって、なんとかなるんじゃないかという意見が見られる。とはいえクリアにはなってない模様。

機能的なところでは、Mozillagraphics teamが興味を示していた。また、ゲームや3Dにおいて非可逆圧縮+アルファチャネルへの需要があるという話も見られる。

機能として需要はあるけれど、今ある実装がまだ使えないという状況なのかな。ただライセンスについては、今年の4月にBSD Licenseのもと公開されたようなので、上で話されていた頃とまたちょっと状況が違うのだろうか。

WebP

で、WebPGoogleが開発しているフォーマット。RIFFの中にVP8を入れたものらしい。知らなかった。

初期は非可逆圧縮だけだったんだけど、2012年に可逆圧縮とアルファチャネルも追加された(可逆圧縮はVP8の派生版を使うらしい)。今年春にはアニメーションやカラープロファイル、メタデータの機能も付加されて、とりあえずどんな画像についてもWebPを使えるようになったとアピールしている。

サポートはもちろんChromeと、Ice Cream Sandwich以降のAndroidブラウザ(可逆圧縮はJelly Beanかららしい)。あと、OperaもPresto時代からサポートしている。Opera Miniで使っているのだろうか。

追記 (2013-08-01): Opera Turboで使ってるというコメントをいただく。ありがとうございます。

他のブラウザではどうか。IE, WebKitは察してもらうとして、Mozillaはどうか。関連するバグは2つ立てられている。

最初に立てられたバグでは、アルファチャネル、メタデータ、カラープロファイルがサポートされていなかったこと、仕様自体が進展中なことを挙げ、前向きではなかったよう。その後、妥当なユースケースと利点があったというわけで2つ目のバグが立てられた。2つ目のバグは…ええと…外野がうるさくてなにが問題になっているのか、なにが進行を妨げているのかわかんない……外野も含めて「コミュニティ」なのだとしたらなかなか美しいね……

JPEG XRに見られた、ライセンスやライブラリの品質については特に触れられていないように見える。Googleが自身の製品にすでに使っているし、VP8もロイヤリティフリーだから、実際に組み込むにあたって、とくに懸念はないということなのかな。


書いたらなんかMozillaキャスティングボートを握ってる感じになっちゃったけど、Webでのサポートを考えると、非可逆圧縮+アルファチャネルが使えるまでにはまだまだ遠そう。

フォーマットの圧縮率とか品質の優劣、カメラやソフトウェアのサポートなんかを取り上げるとキリがないので置いてく。いま実現できていないものがあって、それがなんとかできないのが問題なんだ。そしてとてもやるせない。