// version 3.0 (C) 2001-2002 Joe Maller // Explanations available on my web site: // http://www.joemaller.com Filter "Joe's Soft Spot"; group "Joe's Filters"; input BlurAmount, "Blur", Slider, 10, 0, 250 ramp 85; input SpotOrigin, "Origin", point, 0, 0 input SpotRadius, "Radius", Slider, 50, 0, 500 ramp 80; input SoftSpot, "Edge Softness", Slider, 100, 0, 200; input GaussianCheck, "Gaussian", checkbox, 1; input SpotInvert, "Invert", checkbox, 0; input aspect, "Aspect", Slider, 1, 0.1, 10 ramp 93.5 detent 1; input ApplyAs, "Mode", Popup, 1, "Normal", "Effect Only", "Multiply", "Screen", "Overlay", "Lighten", "Darken", "Add", "Subtract", "Difference"; input Opacity, "Opacity", slider, 100, 0, 100; input title, "www.joemaller.com", Label,""; ProducesAlpha; code exposedbackground = 1; float DitherCheck; DitherCheck = 0; //to turn dithering on, change the 0 to 1 float w, h, i, AspectRadius; dimensionsOf(Dest, w, h); image xbuffer[w][h], xbuffer2[w][h]; float zoomfactor; zoomfactor = w/720 Blur(src1, xbuffer, BlurAmount * zoomfactor, aspectOf(dest)) spotOrigin.x *= w; //because point inputs are not pixel values SpotOrigin.y *= h; AspectRadius = (aspect > 1) ? aspect: 1; CircleLight(dest, SpotOrigin, SpotRadius * zoomfactor * AspectRadius, SoftSpot * zoomfactor, (aspectOf(dest) * aspect), DitherCheck, GaussianCheck, kwhite, kblack) ChannelCopy(dest, xbuffer, kred, knone, knone, knone) if SpotInvert == 1 InvertChannel(xbuffer, xbuffer, 1, 0, 0, 0) end if if ApplyAs == 1; Matte(xbuffer, src1, dest, opacity/100, kalpha); end if if ApplyAs == 2; ChannelMultiply(xbuffer, dest, opacity/100, 1, 1, 1); end if; if ApplyAs == 3; Multiply(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 4; Screen(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 5; Overlay(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 6; Lighten(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 7; Darken(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 8; add(src1, xbuffer, dest, opacity/100, kalpha); end if; if ApplyAs == 9; subtract(src1, xbuffer, dest, opacity/100, kalpha); end if; if ApplyAs == 10; Difference(src1, xbuffer, dest, kalpha); ChannelCopy(src1, dest, kalpha, knone, knone, knone); Matte(dest, src1, dest, opacity/100, knone); end if;