Method: PSD::Compose#linear_burn

Defined in:
lib/psd/renderer/compose.rb

#linear_burn(fg, bg, opacity) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/psd/renderer/compose.rb', line 77

def linear_burn(fg, bg, opacity)
  return apply_opacity(fg, opacity) if fully_transparent?(bg)
  return bg if fully_transparent?(fg)

  mix_alpha, dst_alpha = calculate_alphas(fg, bg, opacity)

  new_r = blend_channel(r(bg), (r(fg) < (255 - r(bg))) ? 0 : r(fg) - (255 - r(bg)), mix_alpha)
  new_g = blend_channel(g(bg), (g(fg) < (255 - g(bg))) ? 0 : g(fg) - (255 - g(bg)), mix_alpha)
  new_b = blend_channel(b(bg), (b(fg) < (255 - b(bg))) ? 0 : b(fg) - (255 - b(bg)), mix_alpha)

  rgba(new_r, new_g, new_b, dst_alpha)
end