透過 PNG を透過のまま拡大する(縁が黒くならない)
透過 PNG を高画質化すると縁が黒ずむことがあります。原因は拡大ではなく、その手前で透明な画素の色が捨てられていることです。
手順
- PNG のまま用意する
白で塗り潰したコピーや JPEG で保存し直したものではなく、元の PNG から始めます。 - ページにドロップする
透過は最後まで保たれます。アップロードは発生しません。 - 絵柄に合ったモデルを選ぶ
ロゴや線画はイラスト向けモデル、切り抜いた写真は写真向けモデルです。 - 等倍で柔らかい縁を確認する
アンチエイリアスの輪郭、光彩、影を、明るい面と暗い面の両方に重ねて見ます。
透過 PNG を高画質化したら輪郭に沿って灰色や黒の縁取りが出た、というとき、拡大がうまくいかなかったわけではありません。 **その手前の工程で画像が壊れています。**どの工程かが分かれば、避けるのは簡単です。透過を保ったまま処理するというのは、要するに透明な画素の下にある色情報を捨てないということです。
黒い縁取りはどこから来るのか
PNG は赤・緑・青・アルファの 4 つのチャンネルを持ちます。アルファは各画素の不透明度です。意外に思われるのは、完全に透明な画素も色の値を持っているという点です。見えないだけで、そこには色が入っています。
多くの画像処理は、この見えない色を捨てます。画像を canvas に読み込んで読み戻すと、完全に透明な画素の色は 0、つまり黒に潰れるのが普通です。この時点ではまだ何も問題に見えません。その画素は依然として見えないからです。
壊れるのは次の工程です。高画質化のモデルは色を扱い、しかも 1 画素ずつではなく周囲の画素をまとめて見ます。絵の輪郭には、部分的に透明な画素の帯があります。輪郭がギザギザではなく滑らかに見えるのは、この帯のおかげです。モデルがこの帯を組み立て直すとき、すぐ隣の透明な領域に書き込まれたばかりの黒が混ざります。黒は「部分的に不透明な画素」の中に入るので、今度は見えます。こうして、画像のあらゆる輪郭をなぞる暗い縁取りが出来上がります。
しかもこれは、透過がいちばん効いている場所ほど強く出ます。アンチエイリアスの輪郭、柔らかい影、光彩、写真から切り抜いた髪や毛。
代わりに何が起きているべきか
3 つあり、3 つ同時に満たされていないと意味がありません。
| アルファを分けて扱う | 透過情報を色とは別に取り分け、単独で拡大する。色と一緒にモデルへ流さない |
| 色を輪郭の外へ広げる | モデルに渡す前に、絵の色を透明な領域の側へ押し出しておく。混ざりうる黒を輪郭の隣に残さない |
| 最後に合成し直す | 拡大した色と拡大したアルファを合わせる。結果は平らに潰れたものではなく透過 PNG になる |
Pixmend はこの手順で処理するので、透過 PNG は透過のまま出力され、縁も汚れません。そのための設定はありません。常にこうなります。
使う側で気をつけること
元の PNG から始める。 すでに白で塗り潰されていたり、途中で一度でも JPEG として保存されていたら、透過はもう存在しません。どんな処理をしても戻せないので、元ファイルを探すほうが早いです。
「安全のため」に先に平らにしない。 一度この縁取りに悩まされた人がよくやる回避策ですが、これは欲しかったものを捨てることで問題を消しているだけです。
チャットアプリ経由に注意する。 PNG を送って受け取ると、黙って JPEG に変換され、透明部分が白で埋まっていることがあります。
絵柄に合わせてモデルを選ぶ。 ロゴ・アイコン・線画はイラスト向けモデル、写真から切り抜いた被写体は写真向けモデルです。透過の扱いはどちらでも同じですが、形の内側の質感の作り方が違います。
結果の確認の仕方
等倍で開いて、真ん中ではなく縁を見てください。形の内側は不透明なので、縁が台無しになっていても綺麗に見えます。
- 暗い面に重ねて見る。 縁取りは白の上では隠れ、黒の上では一目で分かります。暗い画面で使う素材なら、その状態で確認します。
- 柔らかい縁を狙って見る。 影・光彩・ぼかした輪郭は、ほとんどが部分的に透明な画素でできているので、最初に破綻が出ます。
- 輪郭をまたぐ細部を見る。 髪、毛、葉、輪郭を横切る細い線がいちばん厳しい条件です。
- 半透明が半透明のままか確認する。 半分の不透明度で置いた要素が、不透明になって戻ってきてはいけません。
これができないこと
透過を持っていない画像に透過を作ることはできません。ここでやっているのは編集ではなく復元です。本物の背景が写っている写真は、処理しても本物の背景が写った写真のままです。
すでに失われた透過も直せません。 手元のファイルに縁取りが焼き付いているなら、それはもう色そのものです。拡大すれば、大きくなった縁取りが手に入ります。
保存される形式は PNG です。これは重要な点で、アルファチャンネルを持ったまま次の用途へ渡せる形式だからです。処理はすべてブラウザの中で完結するので、未公開の作品やクライアントの素材が端末から出ることはありません。