2024/06/03(月) [n年前の日記]
#2 [cg_tools] GIMPで透明部分のRGB値を残したい
OpenGLでテクスチャを描画すると、透明部分と不透明部分の境界に ―― アルファチャンネル値が0の部分と、255の部分の境界に、変な線が描画されてしまう。テクスチャのフィルタを GL_LINEAR にしているときに、透明部分のRGB値と不透明部分のRGB値で補間して、妙な色が出現してしまうのだろう。たぶん。
その問題を解決するために、透明部分のRGB値に、不透明部分のRGB値も入ってる状態にしたい。GIMP でそういう作業ができそうなのか調べてた。
環境は、Windows10 x64 22H2 + GIMP 2.10.34 Portable。
その問題を解決するために、透明部分のRGB値に、不透明部分のRGB値も入ってる状態にしたい。GIMP でそういう作業ができそうなのか調べてた。
環境は、Windows10 x64 22H2 + GIMP 2.10.34 Portable。
◎ 透明部分に不透明部分の色を引き延ばす :
まずは以下のような画像があるとして。
この画像の透明部分に、不透明部分のRGB値を引き延ばし(?)たい。
元レイヤーは後で重ねたりアルファチャンネルを利用したりするので、まずはレイヤーを複製しておく。レイヤーウインドウで、レイヤーの複製ボタンをクリック。処理したいレイヤーは元レイヤーの下に移動しておく。
続いて、不透明部分のRGB値を引き延ばす。複製したレイヤーを選択して、フィルタ → ぼかし → ガウスぼかし。
オプション値はデフォルト値でもいいかな…。うっすらと周囲に色が伸びてるのが分かるかと。
うっすらとした色に見えるのは、その部分のアルファチャンネルに 0 - 255 の間の値が置かれて半透明になっているからなので、アルファチャンネル値を0か255にしてしまう。レイヤー → 透明部分 → アルファチャンネルのしきい値、を選ぶ。
しきい値の値をグンと小さくしてしまう。半透明だった部分が不透明になって、元々の不透明部分が引き延ばされてるような見た目になってくれる。
この画像の透明部分に、不透明部分のRGB値を引き延ばし(?)たい。
元レイヤーは後で重ねたりアルファチャンネルを利用したりするので、まずはレイヤーを複製しておく。レイヤーウインドウで、レイヤーの複製ボタンをクリック。処理したいレイヤーは元レイヤーの下に移動しておく。
続いて、不透明部分のRGB値を引き延ばす。複製したレイヤーを選択して、フィルタ → ぼかし → ガウスぼかし。
オプション値はデフォルト値でもいいかな…。うっすらと周囲に色が伸びてるのが分かるかと。
うっすらとした色に見えるのは、その部分のアルファチャンネルに 0 - 255 の間の値が置かれて半透明になっているからなので、アルファチャンネル値を0か255にしてしまう。レイヤー → 透明部分 → アルファチャンネルのしきい値、を選ぶ。
しきい値の値をグンと小さくしてしまう。半透明だった部分が不透明になって、元々の不透明部分が引き延ばされてるような見た目になってくれる。
◎ アルファチャンネルを削除する方法 :
前述の手順では、「アルファチャンネルのしきい値」を使ってアルファチャンネルの値を変化させたけれど、そもそもアルファチャンネルを削除して対応する方法もある。
ただ、レイヤー名を右クリックしたときに表示される、「アルファチャンネルの削除」を選んでしまうと、透明部分が背景色で塗り潰されてしまって、元々透明部分に置いてあったRGB値が消滅してしまう…。以下の画像を見れば分かるかと。透明部分のRGB値が背景色のグレーで塗り潰されてしまっている。
そこで、レイヤーマスクを使って、そのあたりの処理をする。
レイヤーを右クリックして、レイヤーマスクの追加、を選ぶ。
レイヤーのアルファチャンネルを移転、を選んでから、「追加」。
レイヤーマスクが追加される。レイヤーマスクは 0 - 255 の値を取るグレースケールになってる。
ここでおもむろに(?)、レイヤーマスクを削除してしまう。レイヤーを右クリックして、レイヤーマスクの削除、を選ぶ。
レイヤーマスクが削除されて ―― つまりは元々あったアルファチャンネル"だけ"が削除された状態になって、透明部分に置かれていたRGB値が目視できるようになる。
以下、参考ページ。
_透過png画像のアルファ値だけを消す方法を教えてください! - 題名の通り... - Yahoo!知恵袋
ただ、レイヤー名を右クリックしたときに表示される、「アルファチャンネルの削除」を選んでしまうと、透明部分が背景色で塗り潰されてしまって、元々透明部分に置いてあったRGB値が消滅してしまう…。以下の画像を見れば分かるかと。透明部分のRGB値が背景色のグレーで塗り潰されてしまっている。
そこで、レイヤーマスクを使って、そのあたりの処理をする。
レイヤーを右クリックして、レイヤーマスクの追加、を選ぶ。
レイヤーのアルファチャンネルを移転、を選んでから、「追加」。
レイヤーマスクが追加される。レイヤーマスクは 0 - 255 の値を取るグレースケールになってる。
ここでおもむろに(?)、レイヤーマスクを削除してしまう。レイヤーを右クリックして、レイヤーマスクの削除、を選ぶ。
レイヤーマスクが削除されて ―― つまりは元々あったアルファチャンネル"だけ"が削除された状態になって、透明部分に置かれていたRGB値が目視できるようになる。
以下、参考ページ。
_透過png画像のアルファ値だけを消す方法を教えてください! - 題名の通り... - Yahoo!知恵袋
◎ 元々の透明部分を反映させる :
元画像が持っていた透明部分を反映させる。レイヤーを複製しておいたので、元画像のレイヤーは残ってるはず。右クリックして、不透明部分を選択範囲に、を選ぶ。
この選択範囲でアルファチャンネルを作る。もう一枚のレイヤーを右クリックして、レイヤーマスクの追加、を選ぶ。
選択範囲、を選んで、「追加」。
元々の透明部分を反映した状態の見た目になった。
この段階では、透明部分 = アルファチャンネルの値が0ではあっても、そこにRGB値がちゃんと残ってる。ピクセル情報、のタブを表示して、マウスカーソル位置のRGBA値を確認すれば、Aが0だけど、RGB値はちゃんと値が入ってることが分かる。
この選択範囲でアルファチャンネルを作る。もう一枚のレイヤーを右クリックして、レイヤーマスクの追加、を選ぶ。
選択範囲、を選んで、「追加」。
元々の透明部分を反映した状態の見た目になった。
この段階では、透明部分 = アルファチャンネルの値が0ではあっても、そこにRGB値がちゃんと残ってる。ピクセル情報、のタブを表示して、マウスカーソル位置のRGBA値を確認すれば、Aが0だけど、RGB値はちゃんと値が入ってることが分かる。
◎ RGB値を残したままpng画像としてエクスポート :
[ ツッコむ ]
以上です。