GIMP的图层合成/混合方法

2023-12-26

在我寻求为 Matlab 中的图像混合工具添加 Alpha 功能时,我遇到了一些障碍。其中,我一直在使用these http://ssp.impulsetrain.com/porterduff.html links http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf作为我关于前景和背景 Alpha 如何影响输出颜色数据和输出 Alpha 的组成的参考。

我最初的方法是简单地使用 aSrc-Over“正常”混合模式的成分和Src-Atop其他模式的合成。与 GIMP 的输出相比,这产生了相似但不同的结果。输出 Alpha 匹配,但 RGB 数据不同。

具体来说,当背景 Alpha 为零时,前景颜色对背景的影响为零。在花了几个小时天真地浏览 GIMP 2.8.10 源代码之后,我注意到一些让我困惑的事情。

除非导出过程中发生某些模式和一些我尚未在代码中收集到的辅助事件,否则该方法大致如下:

if ~normalmode
    FGalpha = min(FGalpha, BGalpha);  % << why this?
end

    FGalpha = FGalpha * mask * opacity;
    OUTalpha = BGalpha + (1 - BGalpha) * FGalpha;
    ratio = FGalpha / (OUTalpha + eps);
    OUT = OUT * ratio + BG * (1 - ratio);

if normalmode
    OUT = cat(3, OUT, OUTalpha);
else
    OUT = cat(3, OUT, BGalpha);
end

令人好奇的地方在于,我从概念上不明白为什么人们会采用最少的阿尔法层进行合成。当然,这种方法会产生与 GIMP 匹配的结果,但如果我不理解其推理,我会不愿意将其设置为默认行为。


最好向某个 GIMP 论坛询问这个问题,但我认为接触普通受众会更有效。澄清和总结:

  • 透明 BG 区域中的颜色不受与不透明前景色相乘的影响,这有意义吗?在未来的某些操作中,这是否会导致硬掩模边缘附近未改变的数据泄露的风险?
  • 虽然没找到,但是还有其他的应用吗 那里使用这种方法?
  • 我使用 GIMP 的行为作为参考是否错误?我没有PS 相比之下,ImageMagick 是如此灵活,以至于它不 确实暗示了一种特定的预期行为。当然,GIMP 有 有些事情它做得不正确;也许这是别的东西 可能会改变。

编辑: 我至少可以通过回避来回答最后一个问题。我决定添加对 SVG 1.2 和旧版 GIMP 方法的支持。 GIMP 将来使用的 GEGL 方法将遵循 SVG 方法,因此我认为这表明了遗留方法的适当性。

无论如何,SVG 方法都基于 Porter-DuffSrc-Over作品。如果参考文档,混合数学相同的事实会被混淆,因为混合和合成是使用预乘 alpha 以代数方式组合的,以减少总体计算成本。除了 SoftLight 之外,核心混合数学与 GIMP 和其他地方使用的数学相同。

只需执行以下操作即可使任何其他混合操作(例如 PinLight、Hue)兼容:

As = Sa * (1 - Da);
Ad = Da * (1 - Sa);
Ab = Sa * Da;
Ra = As + Ad + Ab;   % output alpha
Rc = ( f(Sc,Dc)*Ab + Sc*As + Dc*Ad ) / Ra;

如果你想简化它,然后做一些代数。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GIMP的图层合成/混合方法 的相关文章

  • R 使用值列表作为色标

    我想将变量的值表示为 R 中散点中的点的颜色 x lt rnorm 100 5 y lt rnorm 100 5 plot x y 在这里 我想使用一个变量作为着色的输入 但如果我尝试 plot x y col x 我得到了一些奇怪的东西
  • 打印时字体颜色发生变化

    我这里有一个非常令人困惑的问题 我有一个动态构建的表 这里可能是一个不重要的事实 但只是让你知道 在网页上 我根据逻辑标准将文本设置为特定颜色 在页面上 看起来很棒 当进行打印预览 和实际打印 时 颜色有很大不同 在我的代码中 颜色是 红色
  • 具有透明框架和不透明边缘的图例

    设置图例透明度时 plt legend framealpha 0 5 它会影响背景和边缘 如何仅将透明度应用于背景而不应用于边缘 我努力了 plt legend edgecolor 0 0 0 1 facecolor 1 1 1 0 1 我
  • 在 Mathematica 中创建具有不同颜色边的图形

    我想创建一个图 图论 其中某些边具有与其他边不同的颜色 这将用于突出显示图中从一个顶点到另一个顶点的路径 以下是一些具有不同颜色边缘的示例http demonstrations wolfram com AGraphTheoryInterpr
  • 颜色重新映射 - 使用 3D 网格匹配目标调色板?

    假设我有颜色 FOO 它以 RGB 格式存储 我需要重新着色 FOO 以便它与颜色列表中最接近的颜色匹配 即时执行此操作 我是否无法将每种颜色的 RGB 值视为 3D 网格上的点 r x g y b z 并计算点 FOO 与每个颜色点之间的
  • 如何更改 emacs 上的光标颜色

    我对 Emacs 的颜色做了一些更改 现在唯一的问题是光标在黑色背景上为黑色 我必须更改它 我该怎么办 如果您运行的是最新版本的 emacs 您可以使用 Set cursor color to white set cursor color
  • 如何在Python中设置像素的alpha值

    我正在尝试编辑image https drive google com file d 0B8JcwRV HVk0OURrcTFJczhmV2RlUGdMOG0ybldYUVRoamtF view usp sharing以一种将所有白色像素转
  • 使用 BufferedImages 获取图像每个像素的颜色

    我试图获取图像的每个像素的每种颜色 我的想法如下 int pixels BufferedImage image image ImageIO read this getClass getResources image png int pixe
  • Ruby popen3 和 ANSI 颜色

    我试图让 watchr 在文件更改时自动运行测试 并获得了我需要的大部分工作 除了 RSpec 中的所有 ANSI 颜色都被忽略这一事实 违规代码如下 stdin stdout stderr Open3 popen3 cmd stdout
  • ios 将 alpha 通道视频叠加在另一个视频上

    我一直在尝试创建一个视频模板 该模板使用 alpha 通道视频叠加在 mp4 视频和图像上 这就是我需要创建视频的方式http viewptch ptchcdn com rendered 52b28a9f8d4f980f3a3f99c3 c
  • delphi分组框标题颜色变化

    我正在使用 BDS 2006 想知道您是否可以使用项目中存在的 XPmanifest 更改组框和单选按钮组标题的颜色 因为它始终是蓝色 唯一的方法是重写 Paint 方法TGroupBox http docwiki embarcadero
  • 覆盖按钮的文本颜色不起作用

    我使用每个按钮上的buttonBarStyle 和布局上的buttonBarButtonStyle 为按钮栏创建了一个自定义主题 它工作正常 但我想更改按钮的文本颜色 但它仍然采用默认颜色 android color primary tex
  • 如何计算图像中的 RGB 或 HSV 通道组合?

    我使用 python opencv 加载形状为 30 100 3 的图像 现在想要按颜色计算所有颜色的频率 我不是指单个通道 而是指通道组合 含义 3 个频道列表 例如 255 0 0 表示红色 255 255 0 表示黄色 100 100
  • jasper 报告 pdf 导出中忽略半透明(半透明)背景色

    问 为什么保存为 PDF 时 Alpha 信息会丢失 Jaspersoft studio 不允许我用 Alpha 指定颜色 因此 我尝试聪明地在着色元素上指定键 并更改代码中的颜色 如下所示 JasperReport jasperRepor
  • R 颜色 - 许多独特的颜色仍然很漂亮

    我很好奇你是否有一些关于 R 中颜色酿造的技巧 对于许多独特的颜色 在某种程度上图形仍然好看 我需要相当数量的独特颜色 至少 24 种 可能需要更多 50 种 用于堆叠区域图 所以不是热图 渐变颜色不起作用 我发现了 viridis 它的调
  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • 准确地从屏幕上的像素获取颜色并转换其颜色空间

    我需要从屏幕上的像素获取颜色并转换其颜色空间 我遇到的问题是 将值与数字色度计应用程序进行比较时 颜色值不相同 create a 1x1 image at the mouse position if let image CGImage CG
  • 在 iPad 上显示 PDF 文档 - 颜色问题

    我为 iPad 构建了一个 PDF 阅读器 在将预览中的文档与模拟器和设备进行并排比较时 我注意到一些颜色问题 最好的形容就是颜色变得更加浓郁 近距离使用的相似颜色之间的任何差异都会变得更加明显 而所有颜色总体上看起来都更亮 尽管大肆宣传将
  • 如何在 Pygame 中将具有一定透明度的 PNG 位图传输到表面上?

    我试图将 PNG 图像传输到表面上 但图像的透明部分由于某种原因变成黑色 这是简单的代码 screen pygame display set mode 800 600 pygame DOUBLEBUF 32 world pygame Sur
  • 在 Android 的 Recycler View 中的文本视图背景上生成并设置随机颜色

    I am Trying to Generate Random Colors and set the Random color as background of Text View Just Like in GMail app The Tex

随机推荐

  • 如何在 iOS 中录制语音时以编程方式生成音频波形?

    如何在 iOS 中录制语音时以编程方式生成音频波形 我正在 iOS 中研究语音调制音频 一切正常 只需要一些最好的简单方法来生成检测噪声的音频波形 请不要向我推荐 speakhere 和 auriotouch 的代码教程 我需要本机应用程序
  • 如何修复此错误“未找到:值 BMValsProcessor”

    如何修复此代码中的此错误 trait Processor00 def process oraOptionDfConfig DataFrameReader sparkSession SparkSession Unit class BMVals
  • 使用 swiftmailer 在 symfony 2 中通过 smtp.gmail.com 发送邮件

    我在使用 gmail 从 xampp 本地主机发送邮件时遇到问题 经过很长一段时间我终于成功了 我正在与大家分享 如果我错了 需要适当的解决方案 在你的 symfony 2 的 config yml 中写下这些 swiftmailer di
  • mysqli_multi_query 是异步的吗?

    databases array path Path To Directory main link mysqli connect localhost USERNAME PASSWORD files scandir path ignore fi
  • codeSandBox (React/Node) 的 Http 请求错误

    我在 CodeSandBox StackBlitz 等在线 IDE 中遇到奇怪的错误 我做了一个示例 http 请求 使用 axios 但使用 fetch 或其他问题是相同的 并尝试在控制台中打印响应 我在前端使用 React 在后端使用
  • 在 foreach 循环外部使用 foreach 循环的变量

    我有一个 foreach 循环 我在循环内创建了一个字符串 但我想在循环外使用 var 这可能吗 List
  • .NET版本和C#版本之间的关系? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何确定可以针对特定 NET Framework 版本使用哪个版本的 C 我读过了 https sta
  • Git 精选语法和合并分支

    所以我之前已经做过无数次樱桃挑选 看来我现在必须在生活中失败 我正在尝试从一个分支挑选到另一个分支 这应该很容易 但是我收到了关于它是合并的错误 但是没有给出 m 吗 git cherry pick a8c5ad438f6173dc34f6
  • Mono无法打开sqlite数据库

    我正在尝试对 sqlite v3 数据库进行非常基本的连接 并且我正在使用 monodevelop 3 0 和 Mono 2 10 但无法连接到数据库 我可以让应用程序创建数据库 但随后它尝试连接到数据库时立即失败 有什么建议么 我从不同的
  • 查找可点击的元素

    有没有办法找到用 click 或 live click 指定的所有可点击元素 如果单击任何此类元素 我想执行一些操作 container bind click function event actions 这个捕获所有点击 Thanks 这
  • 如何使用时区偏移格式化 LocalDateTime

    我尝试这样做 ZoneOffset zoneOffset ZoneOffset ofHours 3 DateTimeFormatter fmt DateTimeFormatter ofPattern HH mm ss LocalDateTi
  • 如何确定我的 iOS 设备是否有手电筒?

    在我的应用程序中 我可以选择手电筒 然而 只有 iPhone 4 和 iPhone 4S 有手电筒灯 其他设备没有手电筒灯 如何找到当前设备型号 请帮我 提前致谢 您不应使用设备型号作为是否存在某项功能的指示符 相反 请使用 API 来准确
  • blur.js 尝试请求“none”并且 div 未扩展 100%

    我正在尝试使用http blurjs com http blurjs com 模糊标题栏的标题图像的背景 然而 它给了我一个有趣的错误 我似乎无法追踪 这可能与主要代码和兼容性有关 但我不确定 http jordan rave5 com t
  • 在 Numpy(或 Scipy)中计算斜率

    我正在尝试找到使用 Numpy 和 Scipy 计算斜率的最快 最有效的方法 我有一组由三个 Y 变量和一个 X 变量组成的数据集 我需要计算它们各自的斜率 例如 我可以轻松地一次一行执行此操作 如下所示 但我希望有一种更有效的方法来执行此
  • 按下 iOS swift 后更改 UIBarButtonItem 图标

    In the viewDidload方法 我声明了一个按钮并设置了 RightBarButton let btnFavourite UIButton frame CGRectMake 0 0 30 30 btnFavourite addTa
  • 找不到任何与 com.google.android.gms 匹配的版本:strict-version-matcher-plugin:[15.0.0, 16.0.0)

    项目一直运行良好 直到前两天突然出现错误 我不知道如何解决它 因为我已经做了我能做的一切 包括重新安装 android studio 和 gradle 无法解析配置 app debugCompileClasspath 的所有文件 找不到与
  • Array.push 返回推送值?

    是否有任何实质性原因需要修改Array push 返回推送的对象而不是新数组的长度可能是一个坏主意 我不知道这是否已经被提议或询问过 谷歌搜索只返回了大量与当前功能相关的问题Array push 这是此功能的示例实现 请随意更正它 func
  • ChildNode 类型上不存在属性“tagName”[Typescript]

    我正在从父节点循环子节点 我想访问子节点的 tagName 但错误是 tagName 在类型 ChildNode 上不存在 const contentParsed new DOMParser parseFromString content
  • 创建 LocalDB 以从 Visual Studio SQL 项目进行测试

    我正在尝试为我的项目创建集成测试 我需要测试一个通过存储库调用存储过程的控制器 应在每次运行某些范围的测试时创建一个空数据库 所以我将实施以下步骤 Create LocalDB 运行一些预脚本 以添加测试数据 Run test 运行一些后脚
  • GIMP的图层合成/混合方法

    在我寻求为 Matlab 中的图像混合工具添加 Alpha 功能时 我遇到了一些障碍 其中 我一直在使用these http ssp impulsetrain com porterduff html links http www adobe