web-dev-qa-db-ja.com

背景としてのみ表示される見えないPNG画像レイヤー

私は最近、奇妙な性質を持つ非常に独特のイメージに出会いました。画像はPNG形式で、透明な背景を持つ単純な鳥を表しているだけです。私の友人は私にそれを保存して私の背景としてそれを設定するために簡単な指示で私にイメージを送った。

Original image with just the seagull

私の背景として画像を設定した後、実際にカモメが武器の上に立っていることを示す2番目の画像が表示されます。

Background image with a secret layer?

これは、最初はイメージの性質とそのようなイメージを作成する方法に非常に興味を持っていました。私はPhotoshopで画像を開いたが、普通の画像以外は何も表示されていない - 画像は透明なカモメと同じで、見えないようにするための隠れ層やマスクはない。 Photoshopで画像を確認した後、デスクトップの背景として設定するときにWindowsがファイルに変更を加えたと考えていました - %AppData%\Microsoft\Windows\Themesに移動した後の画像は同じように見えた。

Photoshopで表示または編集した場合と比較して、Windowsデスクトップの背景として設定したときに、この画像が別の隠れ層または完全に別の画像を表示するのはなぜですか。

48

Smashing Magazineのこの 記事で「Dirty Transparency」と呼ばれていたものだと思います

透明PNGの基本的にどの色もRGBA値で表すことができます。ここで、RGBは赤、緑、青のチャンネルを表し、Aはアルファを表します。 「見えない」色は、任意のRGB値+ 0アルファを持つことができます。つまり、色は元の情報を保持しますが、アルファが0に設定されているため透明としてレンダリングされます。

アルファが使用されているとき、なぜあなたはRGB値を保存したいと思いますか?透明な背景のGIFのギザギザのエッジとは異なり、滑らかなエッジと透明な色が得られます。 PNGの透明度は0から255の範囲で、GIFでは100%透明または不透明です。で何かをレンダリングするには、例えば50%の透明度としましょう。あなたはまだRGB値を知る必要があるでしょう。したがって値は保存されます。完全に透明な色を保存するとき、ほとんどの画像編集ソフトウェアはそのRGB情報を捨てます、Photoshopは含まれています。

私はCCバージョンを話すことはできませんが、古いPhotoshopバージョンの「見えない」色を見るにはプラグインが必要です。 1つ選んでください: フォトフリービー または SuperPNG 。 SuperPNGは最近のもので、雑然としていないようです。

なぜこのトリックはうまくいくのですか?壁紙は不透明でなければなりません。私は、Windowsがアルファチャンネル情報を破棄して、その過程で隠れているRGB値を明らかにしたと思います。

59
Rhaenys

Nihal's answer に追加するには、これはGIMPの "anti-erase"ブラシを使って再現できます。イメージがそれをサポートするフォーマットを使用している場合、消去ブラシはアルファチャンネルを追加または削除することができます(消去と消去防止を切り替えるにはAltを押します)。

Kritaの場合、これを行うことができます:Layer > Split Alpha > Alpha into Mask。それが終わったら、作成したばかりのTransparency Mask 1チャンネルを非表示にしたり削除したりすると、画像全体が表示されます。

Windowsの背景には何もないので、おそらく透明部分を取り除いてそれなしで画像を表示するだけです(見た目から32ビット画像から24ビット画像へのすばやく汚い)。

13
Blerg

明確化の1つのポイント:これはバグではなく、png仕様で指定されている動作です。具体的には、ビューアまたはコンバータが透明度を理解できない場合、または透明度がコンテキストに適していない場合、またはアルファチャネルを使用しない場合があることを仕様は述べています。さらに、この仕様では、アルファチャンネルが無視される場合に画像が役立つように、すべての画像ジェネレータに透明色を設定するように要求しています。 (私の言い換えれば、私はこの仕様書を読んでから数年が経ちました。)

3
hildred