Using Core Image Filters

Apple provides an image processing framework named Core Image which you can use from JavaScript to alter the apperance of your image. Using filters from the Core Image framework with Retrobatch is easy (and there are hundreds of filters to choose from).

Comic Effects

Here's an example of one of the easiest filters to use, CIComicEffect:

function processAsset(document, jsnode, asset) {

    // Grab a instance of CIImage out of our asset
    var image = asset.CIImage();

    // Create an instance of the CIComicEffect filter from Core Image
    var filter = CIFilter.filterWithName('CIComicEffect');

    // Tell the filter what image to use
    filter.inputImage = image;

    // Get the filtered image
    var comicImage = filter.outputImage();

    // Pass that filtered image back to our asset.

    return true;

Motion Blur

Here is another example, where we perform different operations on the image as well as use a CIMotionBlur which takes multiple settings:

function processAsset(document, jsnode, asset) {

    // Grab a CIImage from our asset
    var image = asset.CIImage();

    // "Clamp" the image, so when we do a motion blur next we don't get transparent edges.
    affineImage = image.imageByClampingToExtent();

    // Create a our motion blue instance
    var filter = CIFilter.filterWithName('CIMotionBlur');

    // Give it an image to work with
    filter.inputImage = affineImage;

    // The the radius of the blur. Larger numbers means a bigger "smear" in the blur.
    filter.inputRadius = 40;

    // set the angle of the blur as 45 degrees, but the filter needs it in radians so convert it to that format first.
    filter.inputAngle = -45 * (Math.PI/180);

    // get our blurred image
    var blurredImage = filter.outputImage();

    // Crop our filtered image to the size of the original image. Otherwise we'll get an image which is bigger than our original because the blur will continue outside the bounds of the original.
    blurredImage = blurredImage.imageByCroppingToRect(image.extent());

    // And finally, set the image on the asset.

    return true;

Convolution Kernel

And finally, here's an example which uses a convolution to create an embossing effect:

function processAsset(document, jsnode, asset) {

    var m = `[1 0 -1
              2 0 -2
              1 0 -1]`;

    var image = asset.CIImage();

    var filter = CIFilter.filterWithName('CIConvolution3X3');

    filter.inputImage = image;
    filter.inputWeights = CIVector.vectorWithString(m);
    filter.inputBias = .5;
    var filteredImage = filter.outputImage();

    filteredImage = filteredImage.imageByCroppingToRect(image.extent());