PNGとしてエクスポートするときにPhotoshopが完全に透明なピクセルを処理する方法に問題があります。つまり、完全に透明なピクセルの赤、緑、青のカラーチャンネルは、Photoshopで定義した色ではなく0として保存されます。
例:レイヤーマスクのあるPSDファイルがあります。画像の一部の色付き部分はレイヤーマスクによって完全に透明になりますが、元のカラーチャンネルを0ではなくPNGファイルに書き込む必要があります。
(はい、PNG形式自体には完全に透明なピクセルであってもRGBデータが含まれています。これはPNGではなくPhotoshopの問題です。)
ピクセルが完全に透明なときにカラーデータを保持することが重要な理由を知りたい場合は、いくつかの使用例があります。
- PNGは保存時よりも高い解像度でサンプリングされており、サンプリングされた値は隣接するピクセル間で補間されます。これにより、補間が透明度によって重み付けされていない場合、画像の周りにかすかな黒い「ハロー」ができます。(私の場合、このアップサンプリングはGPUで行われていますが、パフォーマンス上の理由から、透明度は重要ではありません。)
- PNGファイルの赤、緑、青、およびアルファチャネルは、色情報の保存以外の目的で使用されています。(私の場合、4つのチャネルすべてを使用して、リアルタイムの照明計算に必要なデータを保存します。)
ご協力いただきありがとうございます!
編集
視覚的な補助具を使用して、私が抱えている問題を説明しようとします。透明なものを表示するのは難しいですが、うまくいけばこれで私の問題がより明確になります:
1つのレイヤーとレイヤーマスクを含むPSDファイルがあります。カラーレイヤーは次のようになります。
レイヤーマスクは次のようになります。
このPSDファイルをPNGとしてエクスポートすると、次のようになります。
(白い領域は確かに透明です。白い背景に対して白く見えるだけです。)
あなたは疑問に思うかもしれません:問題は何ですか?そうですね!問題は、これらの透明ピクセルに格納されている色情報にあります。ツールを使用して、RGBをそのままにしてPNGから不透明度データを取り除くと、Photoshopが透明ピクセルに保存する色情報を確認できます。
ご覧のとおり、Photoshopは透明ピクセルの色情報を黒に置き換えました。一方、PNGから不透明度データを削除すると、元のカラーレイヤーとまったく同じようになります。