問題タブ [gegl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - GIMP: 差ブレンディング モードの GIMP と一致しない POC 結果
Python の POC の一部として、GEGL ブレンド モード、Color DodgeおよびSubtractを実装しようとしています。私が従う流れは、減算によって成功した回避です。実装のために次のソースを参照しています。
- SVG 合成仕様: https://www.w3.org/TR/SVGCompositing/#comp-op-property
- Color DodgeおよびSubtractの GEGL 実装。
カラー覆い焼きブレンディングは正しく機能しており、GIMP の結果と「ほぼ」同じです (一部のピクセルでは、強度の差が最大 1 になりますが、これで十分です)。しかし、Subtract で得られる結果は、GIMP で観察される結果とはまったく異なります。Subtract は、各チャネルの単純な要素ごとの違いであると理解しました。
私はリニアRGBで作業しています。以下は私のPython実装です:
そのため、減算モードでは、覆い焼き操作の出力をトップ レイヤーに、元のソース イメージをボトム レイヤーにしました。不透明度は 100% に設定されています。これは私の目的を果たし、実装を簡素化するためです。
コードの構造がきれいではありません。では、これで失礼します。まず、アルゴリズムを修正したいと思います。
以下は、検証に使用した 2 色のテスト イメージです: Source Image。左半分の RGB トリプレット: (71, 66, 50)、右半分: (22, 255, 182)。
GIMP とPOCからのColor Dodgeの出力。両方の画像の RGB トリプレットは同じです - 左: (98, 89, 62); 右: (24、255、255)。
Subtract を適用した後の出力は次のとおりです: GIMP、POC。最終的な合成画像に大きな違いが見られます: GIMP 画像の RGB トリプレット: (69, 60, 35) および (4, 255, 255) POC 画像の RGB トリプレット: (27, 23, 12) および (2, 0) 、73)
SOで同様の問題を見つけようとしたところ、これ、これ、およびこれが発見されました。しかし、これらは私が観察してきた行動を理解するのに役立ちませんでした. この点で誰かが私を助けてくれれば幸いです。
編集 (13/10/2021): 減算 (ドキュメントに従って): max(Background - Foreground, 0)。Subtract はブレンドにアルファ情報を使用していないようです。結果に差異が見られたので、BG 画像で個別に Subtract をテストしようとしました。そこで、2 つのプレーンな RGB イメージ (アルファを 1 に設定) で試してみました - BG: (205,36,50)、FG: (125,38,85)。結果として得られる色 Blended: (170, 234, 0) は、上記の計算には当てはまりません。