For anybody interested, I wrote up a small test that uses shaders to mimic Photoshop's blend modes. In the OP's case it would be easier just to use MODE_SCREEN, although might have undesirable results depending on the two images.
You can plug in any of Kevin Bjorke's GLSL fragment shaders, e.g. color burn, color dodge, multiply, overlay, etc.
http://forum.processing.org/topic/glsl- ... -availableOne day I will add this to some sort of Slick Shader wiki.

And also look into multi texture coords, since this isn't very practical for different image sizes at the moment.
Source:
http://pastebin.com/9kMiTYp3Vertex shader:
Code:
void main(){
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[1] = gl_MultiTexCoord1;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Fragment shader:
Code:
//
// BlendScreen.glsl
// 2010 Kevin Bjorke http://www.botzilla.com
// Uses Processing & the GLGraphics library
//
uniform sampler2D bottomSampler;
uniform sampler2D topSampler;
uniform float Opacity;
// utility function that assumes NON-pre-multiplied RGB...
vec4 final_mix(
vec4 NewColor,
vec4 BaseColor,
vec4 BlendColor
) {
float A2 = BlendColor.a * Opacity;
vec3 mixRGB = A2 * NewColor.rgb;
mixRGB += ((1.0-A2) * BaseColor.rgb);
return vec4(mixRGB,BaseColor.a+BlendColor.a);
}
void main(void) // fragment
{
vec4 botColor = texture2D(bottomSampler,gl_TexCoord[0].st);
vec4 topColor = texture2D(topSampler,gl_TexCoord[0].st);
vec4 comp = final_mix(1.0-(1.0-botColor)*(1.0-topColor),botColor,topColor);
gl_FragColor = comp;
}