Blending Modes con PixelMath
por Enzo De Bernardini
El siguiente listado de ejemplos muestra como recrear diferentes blending modes entre dos imágenes utilizando PixelMath (ver también la publicación original en el foro de PixInsight). Para ello se ha utilizado como imágenes de ejemplo dos gradientes en escala de grises, de negro a blanco, uno vertical (IMG1) y otro horizontal (IMG2), de manera tal que en términos de "capas" el blending mode es aplicado a la IMG2 la cual estaría "por encima" de IMG1. Este detalle es importante para las expresiones no conmutativas (detallado entre paréntesis).
Los gradientes fueron creados con PixelMath, y uno de ellos rotado con FastRotation en 90º contra-reloj. Luego los correspondientes IDs fueron editados (ver como cambiar el ID).
Expresión de PixelMath (RGB/K) para crear el gradiente:
max( 0, X() )
Gradientes utilizados:
- Darken
min( IMG1, IMG2 )
- Multiply
IMG1 * IMG2
- Color Burn (no conmutativa)
~(~IMG1 / IMG2)
- Linear Burn
IMG1 + IMG2 - 1
- Lighten
Max( IMG1, IMG2 )
- Screen
~(~IMG1 * ~IMG2)
- Color Dodge (no conmutativa)
IMG1 / ~IMG2
- Overlay (no conmutativa)
iif( IMG1 > 0.5, ~(~(2*(IMG1 - 0.5)) * ~IMG2), 2*IMG1*IMG2 )
- Soft Light (no conmutativa)
iif( IMG2 > 0.5, ~(~IMG1 * ~(IMG2 - 0.5)), IMG1*(IMG2 + 0.5) )
- Hard Light (no conmutativa)
iif( IMG2 > 0.5, ~(~IMG1 * ~(2*(IMG2 - 0.5))), 2*IMG1*IMG2 )
- Hard Mix
iif( IMG1 < 1 - IMG2, 0, 1 )
- Vivid Light (no conmutativa)
iif( IMG2 > 0.5, ~(~IMG1/(IMG2 - 0.5)/2), IMG1/~(2*IMG2) )
- Linear Light (no conmutativa)
iif( IMG2 > 0.5, IMG1 + 2*(IMG2 - 0.5), IMG1 + 2*IMG2 - 1 )
- Pin Light (no conmutativa)
iif( IMG2 > 0.5, Max( IMG1, 2*(IMG2 - 0.5) ), Min( IMG1, 2*IMG2 ) )
- Difference
IMG1 -- IMG2
- Exclusion
0.5 - 2*(IMG1 - 0.5)*(IMG2 - 0.5)
- Substract
IMG1 - IMG2
PM_BlendingModes.xpsm
Colección de íconos de instancia de PixelMath.