乗算されていないRGB + Alphaへの透明度


16

Photoshop CS5には透明レイヤーがあります(したがって、内部的には、事前乗算されていないRGBコンポーネントとピクセルごとのアルファコンポーネントとして保存される可能性が最も高い)。

次に、これを不透明なレイヤー(単に乗算されていないRGB)+アルファマスクに変換します。結果は元のものと同じように見えるはずです。

透明なレイヤーの真下に黒を配置し、そこから選択範囲をマスクとして取得してレイヤーをマージすることはできません。

問題を理解し、解決策を提供していただければ幸いです。

別の説明として:私はこれの逆プロセスが欲しい:

  1. 新しいレイヤーを作成し、任意の画像に貼り付けます
  2. 白から黒へのグラデーションでマスクを作成する
  3. レイヤーマスクを適用する

説明画像:

状態A: ここに画像の説明を入力してください

状態B: ここに画像の説明を入力してください


重要:この例では、レイヤーは完全に一定の赤になっていますが、一定の赤ではなく、任意の画像を考えることができます。so-状態Aから状態Bに移行するには、単にレイヤーマスクを適用する必要があります。

州Bから州Aへの行き方を知りたい


ここで何らかのタイプのマスキングプラグインが役立つのではないかと思います。不透明度情報は存在しますが、それを取得する方法の問題です。ピクセルレベルの情報を取得することは、スクリプトAPIには存在しません(少なくともApplescriptにはありますが、サポートされているすべての言語は私が見たものと一致しているようです)。
フィリップレーガン

回答:



5

違う!すべて間違っています!

私は自分自身を欺きました、そしてあなたもその過程で:私が作成したのは確かに事前に乗算された画像です-黒ではなく、白で事前に乗算されました。この答えは、他の人がその上に構築できるように残しておきます。


私は次のようにそれをすることができました:

  1. 画像から真のRGBAチャンネルを抽出
  2. それらを使用して新しいイメージを構築します

そして、ここに私がそれをした方法があります:

テスト画像

これは私が使用したテスト画像です。PSのチャンネルビューは次のようになります。

チャンネル

個々のチャネルを選択することで、それらを個々のレイヤーにコピーし、次に白い背景で平坦化して、次に示すように白黒のマップを受信しました。

bw-map

また、レイヤーのサムネイルをコマンドキーを押しながらクリックして、選択した新しいレイヤーを塗りつぶすことで、元の画像の透明度をレイヤーに抽出しました。

次に、同じサイズで透明度のない新しい画像を作成しました。次に、作成したRGBレイヤーを新しい画像の対応するチャンネルに貼り付けました。

新しい画像のチャンネル

最後のステップでは、ダブルクリックしてレイヤーを「平坦化」し、元の画像のアルファレイヤーを使用してレイヤーマスクを作成しました。

レイヤーマスク


前述のように、これは事前乗算されていないイメージを作成しません。私の例は事前乗算されないために次のように見える必要があるためです。

正しいバージョン

誰かが私より賢く、これを作成できますか?高度なピクセルベースのスクリプトがなければ、これはPhotoshop内では不可能だと思います。


5

Ok-フォトショップPixelBenderプラグイン(http://labs.adobe.com/downloads/pixelbenderplugin.html)で使用できるシンプルなpixelBenderフィルターを作成して、レイヤーの透明度を削除しました。ここにあります:http : //neo.cycovery.com/removeTransparency.pbk


2

与えられた答えとあなたのコメントに基づいて、短い答えは次のとおりです。あなたがしたいことをすることはできません。マスクを適用すると、レイヤーがレンダリングされ、表示されていない画像データが破棄されます。

編集:

サンプルpngファイルをいくつか作成し、phpを使用してそれらを操作しました(以下のソースコード)。

レイヤーにマスクがあるときにランダムな透明度でpngを作成して保存すると、アルファサポートが有効になっているかどうかにかかわらず、100%クリア領域(ボックスツールなど)が白で表示されます。ある程度の100%クリアを含むグラデーションは、アルファを無効にすると表示されません。

レイヤーマスクを(永続的に)適用してからpngを作成すると、アルファが無効になっている場合、phpは元の画像を提供します。

したがって、これに対する潜在的な回避策は、アルファPNGをサポートしないソフトウェアパッケージを見つけて、そこから再保存することです。元のマスクの回復については、まだ見ていません。

両方のコードサンプルは、概念実証と低速です。

<?php

$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$enable_alpha = 0;  //set to 0 to disable aplha

if ($enable_alpha) {
    imagealphablending($im, false);
    imagesavealpha($im, true);
}

header('Content-Type: image/png');
imagepng($im);

imagedestroy($im);

?>

アルファを抽出するには(注意:phpには256ではなく128レベルのアルファのGD制限があります)、精度がいくらか失われます。レベルツールを使用して、アルファを256に拡大できます)

<?php

$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$w = imagesx($im);
$h = imagesy($im);

$om = imagecreatetruecolor($w,$h);

for ($x = 0; $x < $w; $x++) {
    for ($y = 0; $y < $h; $y++) {
        $rgb = imagecolorat($im, $x, $y);
        $colors = imagecolorsforindex($im,  $rgb);

        $orgb = imagecolorallocate($om,$colors['alpha'],$colors['alpha'],$colors['alpha']);
        imagesetpixel($om,$x,$y,$orgb);
    }
}

header('Content-Type: image/png');
imagepng($om);

imagedestroy($om);
imagedestroy($im);

?>

しかし、データはまだそこにあります。RGBAピクセルデータのRGB部分です。それを抽出する方法がある必要があります
マット

1
実際のサンプルファイルを提供してみませんか?あなたの質問では、透明な領域を持つ単一のレイヤーを明確に表示し、マスクもアルファチャンネルも表示しません。
horatio

.pngには、100%の透明な黒のパレットカラーが事前定義されています。
アルスマギカ

これが実際に質問に答えているかどうかはわかりません-PNG処理に固有のようです。
e100

2

私はGIMPでそれを行う方法を見つけました。PhotoShopではないかもしれませんが、少なくともあなたが尋ねることはできます。(とにかくそれを解釈するように;))

  • GIMPで画像を開きます。
  • レイヤーボックス内のレイヤーをマウスの右ボタンでクリックします
  • コンテキストメニューから「レイヤーマスクを追加選択します
  • 次のメニューで、「転送レイヤーアルファチャネル」を選択し、「追加」ボタンをクリックします

この時点で、アルファチャンネルマスクのある画像が残っています。

さらに一歩進むことができます:

  • 右のレイヤーマスクをクリックして、「選択削除レイヤーマスクを
  • これで、アルファマスクなしの画像が残ります。

方法についてのYouTubeクリップもあります


ロベルト:はい、あなたは答えを見つけました。それはまさに私たちが望むものであり、無料です!! あなたが投稿したビデオを、同じ質問をする他の人の回答として使用します(PSでレイヤーを無限に複製することによってのみ可能になるまで)

1

これは驚くほど複雑なようです。元の質問とそのさまざまな説明を正しく理解している場合、問題は透明度を含む任意の画像を取得して完全に不透明にし、元のアルファ値をマスクとして適用して元の外観を再作成することです。

これが質問である場合、少し退屈な場合、これは非常に簡単な答えです。

  1. レイヤーを10回コピーします。透明度は、合成画像に「塗りつぶされます」。

  2. すべてのコピーをマージします(ただし、元のレイヤーではなく、最後の手順に必要です)。

  3. 結合されたレイヤーで手順1と2を繰り返してから、もう一度実行します。この時点で、100%透明未満のピクセルはすべて100%不透明になりました(いくつかの浮遊がある場合は、なくなるまでプロセスを繰り返します)。それは、回復可能な限り多くの画像情報です。

  4. 元のレイヤーのサムネイルでCtl / Cmd-クリックして、その透明度を読み込みます。

  5. 新しい不透明なレイヤーを選択した状態で、レイヤーパネルのレイヤーマスクアイコンをクリックします。


0

わかりました、これは実際には非常に簡単です(行進アリを無視する必要があります)

新しいレイヤーを作成し、使用している色で完全に塗りつぶします(サンプリングする場合は、最初の画像の中心から取ります)

ここに画像の説明を入力してください

ここに画像の説明を入力してください

次に、最初の画像を取得し、Ctrlキーを押しながらレイヤーのサムネイルをクリックすると、このバージョンが表示されます。 ここに画像の説明を入力してください

前に言ったように、マーチングアリを無視すると、CS5で自動的にフェザリングが有効になります。

次に、塗りつぶされたレイヤーが選択されていることを確認し、マスクボタンをクリックします。

ここに画像の説明を入力してください

次に、最下層を非表示にするだけで、後は正確な効果が得られます。

ここに画像の説明を入力してください

そして、それがCS5で適用されたマスクをリバースエンジニアリングする方法です。CS5レイヤー選択機能は非常に高度であるため、ほとんどの場合、マーチングアリは無視されます。選択に伴うフェザーが正しく表示されないためです:)

それがあなたのためにうまくいくことを願っています。


あなたの答えに感謝しますが、これは私が探しているものではありません-説明したように、一定の赤はこの例のためだけです!これは、任意の画像(だけでなく、一定の塗りつぶしの色)することができます-とコルスの私は、利用可能なオリジナルuntransparent画像がありません
マット

質問に画像を投稿してください。一定の塗りつぶしを投稿する場合は、一定の塗りつぶしに基づいて回答します。ただし、CS5の選択は非常に高度であり、驚くかもしれません。やった
カイル

もちろん、私はそれらの選択テクニックについて知っています!問題の問題は、透明層の一部のみRGBにアクセスする方法である
マット

レイヤーの上には3つのタブがあり、チャンネルをクリックします。そこには、赤、緑、青、レイヤーマスクがあります。たぶんこれはあなたが求めているものですか?
カイル

しかしのような層neo.cycovery.com/alpha_prob2.jpgは、アルファチャンネルを示していない-その代わり、それは単に透明性RG及びBチャネルが既に適用表示
マット

0

あなたがしたいことは、Photofreebiesの「Remove Transparency」プラグインのようなプラグインによって簡単にできます。最初に、コマンドキーを押しながらレイヤーをクリックして透明ピクセルを選択し、この透明度情報を新しいチャンネルに保存して保持します。次に、「透明度を削除」フィルターを適用すると、レイヤーの「非表示」ピクセルが不透明になります(Photoshopが100%透明ピクセルをどのようにレイアウトするかを見ると非常に興味深いです)。これがPhotoshopにネイティブに組み込まれることを長年願っていますが、残念ながら高度すぎると思います。

残念ながら、Mac用のこのようなプラグインのPhotoshop CS6互換バージョンを見つけることができないので、私は今立ち往生しています。GraphicConverterでもできます(アルファチャネルの削除)。


0

答えは次のとおりです。

  1. 画像に必要なものでレイヤーを作成します。

  2. 目的のアルファチャネルを選択します。

  3. 選択範囲を画像レイヤーの「レイヤーマスク」にします。

  4. レイヤーマスクを右クリックし、「レイヤーマスクを適用」します。

これで魔法が始まります:

  1. [レイヤー]に移動し、下部にある[マット]から[ブラックマットの削除]を選択します。

どういたしまして!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.