{"version":3,"sources":["openseadragon-filtering.js","caman.full.js","imagefilters.js"],"names":["setOptions","instance","options","filters","$","isArray","i","length","filter","processors","Error","filterIncrement","loadMode","viewer","forceRedraw","itemsToReset","items","getAllItems","world","j","addItemToReset","reset","item","indexOf","push","result","getItemCount","getItemAt","getFiltersProcessors","globalProcessors","window","OpenSeadragon","require","version","major","minor","Viewer","prototype","setFilterOptions","this","filterPluginInstance","FilterPlugin","tileLoadedHandler","event","self","tiledImage","tile","image","canvas","document","createElement","width","height","context","getContext","drawImage","_renderedContext","callback","getCompletionCallback","applyFilters","_filterIncrement","filtersProcessors","currentIncrement","callbacks","tileDrawingHandler","rendered","_originalImageData","putImageData","getImageData","imgData","addHandler","Filters","THRESHOLDING","threshold","pixels","data","r","g","b","v","BRIGHTNESS","adjustment","CONTRAST","GAMMA","Math","pow","GREYSCALE","val","INVERT","MORPHOLOGICAL_OPERATION","kernelSize","comparator","kernelHalfSize","floor","offset","originalPixels","y","x","pixelX","pixelY","CONVOLUTION","kernel","sqrt","weight","Analyze","Blender","Calculate","Caman","CamanParser","Canvas","Convert","Event","Fiber","Filter","IO","Image","Layer","Log","Module","Pixel","Plugin","Renderer","Root","Store","Util","fs","moduleKeywords","slice","vignetteFilters","__indexOf","l","__slice","__hasProp","hasOwnProperty","__bind","fn","me","apply","arguments","__extends","child","parent","ctor","constructor","key","call","__super__","obj","value","_ref","extended","includes","included","delegate","args","source","target","_i","_len","_results","pop","aliasFunction","to","from","_this","aliasProperty","Object","defineProperty","get","set","func","Array","sel","root","exports","querySelector","uniqid","id","extend","copy","dest","prop","src","clampRGB","copyAttributes","opts","attr","_ref1","attributes","except","nodeName","setAttribute","nodeValue","dataArray","NodeJS","Uint8Array","_super","nodeFileReady","finishInit","bind","imageLoaded","parseInt","getAttrId","isNaN","has","initializedPixelData","originalPixelData","cropCoordinates","cropped","resized","pixelStack","layerStack","canvasQueue","currentLayer","scaled","analyze","renderer","domIsLoaded","parseArguments","setup","execute","release","date","DEBUG","allowRevert","crossOrigin","remoteProxy","proxyParam","autoload","toString","getAttribute","cb","listener","setTimeout","readyState","debug","addEventListener","initObj","initType","imageUrl","setInitObject","toLowerCase","initNode","initImage","initCanvas","readFile","err","imageWidth","imageHeight","parentNode","replaceChild","imageAdjustments","waitForImageLoaded","needsHiDPISwap","hiDPIReplacement","swapped","isRemote","proxyUrl","isImageLoaded","onload","complete","naturalWidth","naturalHeight","hiDPIRatio","pixel","originalWidth","preScaledWidth","originalHeight","preScaledHeight","hiDPIAdjustments","hasId","assignId","imageData","pixelData","dimensions","put","reloadCanvasData","resetOriginalPixelData","hiDPIDisabled","ratio","style","scale","backingStoreRatio","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","hiDPICapable","replaceCanvas","newCanvas","oldCanvas","render","trigger","revert","updateContext","originalVisiblePixels","ctx","coord","endX","endY","scaledCanvas","startX","startY","_j","_ref2","_ref3","locationToCoordinates","process","name","processFn","add","type","Type","Single","processKernel","adjust","divisor","bias","Kernel","processPlugin","plugin","newLayer","layer","LayerDequeue","LayerFinished","executeLayer","pushContext","popContext","applyCurrentLayer","applyToParent","c","calculateLevels","levels","numPixels","_k","DOMUpdated","img","imgs","parser","querySelectorAll","parse","ele","ready","dataStr","caman","INST_REGEX","e","inst","instFunc","m","unparsedInstructions","RegExp","match","Function","_error","toImage","blenders","register","rgbaLayer","rgbaParent","distance","x1","y1","x2","y2","randomRange","min","max","getFloat","rand","random","toFixed","round","luminance","rgba","bezier","start","ctrl1","ctrl2","end","lowBound","highBound","Ax","Ay","Bx","By","Cx","Cy","curveX","curveY","leftCoord","rightCoord","t","x0","x3","y0","y3","hexToRGB","hex","charAt","substr","rgbToHSL","d","h","s","hslToRGB","p","q","hueToRGB","rgbToHSV","hsvToRGB","f","rgbToXYZ","z","xyzToRGB","xyzToLab","a","whiteX","whiteY","whiteZ","labToXYZ","rgbToLab","xyz","labToRGB","events","types","listen","_fn","_type","LoadOverlay","filterFunc","domainRegex","corsEnabled","isURLRemote","url","matches","domain","remoteCheck","info","encodeURIComponent","useProxy","lang","langToExt","ruby","python","perl","javascript","save","nodeSave","browserSave","toBase64","replace","location","href","file","overwrite","stats","statSync","isFile","writeFile","toBuffer","toDataURL","blendingMode","opacity","layerID","createImageData","setBlendingMode","mode","copyParent","parentData","fillColor","overlayImage","renderQueue","layerData","Logger","console","log","loc","coordinatesToLocation","setContext","locationXY","pixelAtLocation","getPixelRelative","horiz","vert","newLoc","putPixelRelative","nowLoc","getPixel","putPixel","toKey","toHex","includeAlpha","plugins","processNext","modPixelData","Blocks","cpus","job","finishedFn","currentJob","shift","loadOverlay","executePlugin","executeFilter","eachBlock","blockN","blockPixelLength","bnum","lastBlockN","n","blocksDone","run","blockFinished","renderBlock","renderKernel","blockNum","totalBlocks","startPixel","endPixel","adjustSize","builder","builderIndex","k","res","blocksFinished","search","flush","color","amt","avg","abs","hsv","level","rgb","chan","red","green","blue","chans","cps","split","reverse","curves","newDims","error","degrees","brightness","strength","gamma","colorize","size","center","dist","div","defaults","dim","percent","cornerRadius","method","coords","left","right","bottom","top","corners","maxDist","radialDist","BlurStack","getLinearGradientMap","getRadialGradientMap","mul_table","shg_table","centerX","centerY","angle","mirrored","cnv","gradient","cos","sin","createLinearGradient","addColorStop","fillStyle","fillRect","radius1","radius2","createRadialGradient","next","radiusData","radius","increaseFactor","blurLevels","b_in_sum","b_out_sum","b_sum","blend","currentIndex","g_in_sum","g_out_sum","g_sum","heightMinus1","iblend","idx","imagePixels","index","iradius","lookupValue","mul_sum","pb","pg","pr","r_in_sum","r_out_sum","r_sum","radiusPixels","radiusPlus1","rbs","shg_sum","stack","stackEnd","stackIn","stackOut","stackStart","steps","sumFactor","w4","wh","wh4","widthMinus1","yi","yp","yw","_l","_m","_n","_o","_p","_q","_r","focusWidth","startRadius","radiusFactor","PI","numOfAreas","numOfValues","vignette","greyscale","contrast","noise","sepia","channels","exposure","saturation","grey","vibrance","sharpen","posterize","clip","stackBlur","hue","to_radians","translate","rotate","restore","debounce","wait","immediate","timeout","later","callNow","clearTimeout","toggleVisablity","element","isShown","getComputedStyle","currentStyle","display","getElementValueAsFloat","parseFloat","getElement","updateFilters","sync","map","processor","imagefilters","imageFilterInstance","ImagefilterTools","buttonActiveImg","showControl","startOpen","prefixUrl","toolsLeft","toolsTop","toolsWidth","toolsHeight","popUpClass","navImages","imagetools","REST","GROUP","HOVER","DOWN","filterName","setTo","defaultValue","step","toggleButton","prefix","useGroup","buttons","Button","clickTimeThreshold","clickDistThreshold","tooltip","getString","srcRest","srcGroup","srcHover","srcDown","onRelease","openTools","appendChild","imgDown","cloneNode","createPopupDiv","ControlDock","popup","viewerPosition","getBoundingClientRect","popupTop","popupLeft","textAlign","position","border","backgroundColor","addControl","filterElement","onRangeChange","label","margin","innerHTML","resetButton","padding","resetFilters","filterInput","rangeInputElmt","inputEvtHasNeverFired"],"mappings":"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AAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KACAC,GAAA,EAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,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,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KACAC,GAAA,EAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAA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","file":"openseadragonimagefilter.js","sourcesContent":["/*\n * This software was developed at the National Institute of Standards and\n * Technology by employees of the Federal Government in the course of\n * their official duties. Pursuant to title 17 Section 105 of the United\n * States Code this software is not subject to copyright protection and is\n * in the public domain. This software is an experimental system. NIST assumes\n * no responsibility whatsoever for its use by other parties, and makes no\n * guarantees, expressed or implied, about its quality, reliability, or\n * any other characteristic. We would appreciate acknowledgement if the\n * software is used.\n */\n\n/**\n *\n * @author Antoine Vandecreme \n */\n(function() {\n\n 'use strict';\n\n var $ = window.OpenSeadragon;\n if (!$) {\n $ = require('openseadragon');\n if (!$) {\n throw new Error('OpenSeadragon is missing.');\n }\n }\n // Requires OpenSeadragon >=2.1\n if (!$.version || $.version.major < 2 ||\n $.version.major === 2 && $.version.minor < 1) {\n throw new Error(\n 'Filtering plugin requires OpenSeadragon version >= 2.1');\n }\n\n $.Viewer.prototype.setFilterOptions = function(options) {\n if (!this.filterPluginInstance) {\n options = options || {};\n options.viewer = this;\n this.filterPluginInstance = new $.FilterPlugin(options);\n } else {\n setOptions(this.filterPluginInstance, options);\n }\n };\n\n /**\n * @class FilterPlugin\n * @param {Object} options The options\n * @param {OpenSeadragon.Viewer} options.viewer The viewer to attach this\n * plugin to.\n * @param {String} [options.loadMode='async'] Set to sync to have the filters\n * applied synchronously. It will only work if the filters are all synchronous.\n * Note that depending on how complex the filters are, it may also hang the browser.\n * @param {Object[]} options.filters The filters to apply to the images.\n * @param {OpenSeadragon.TiledImage[]} options.filters[x].items The tiled images\n * on which to apply the filter.\n * @param {function|function[]} options.filters[x].processors The processing\n * function(s) to apply to the images. The parameters of this function are\n * the context to modify and a callback to call upon completion.\n */\n $.FilterPlugin = function(options) {\n options = options || {};\n if (!options.viewer) {\n throw new Error('A viewer must be specified.');\n }\n var self = this;\n this.viewer = options.viewer;\n\n this.viewer.addHandler('tile-loaded', tileLoadedHandler);\n this.viewer.addHandler('tile-drawing', tileDrawingHandler);\n\n // filterIncrement allows to determine whether a tile contains the\n // latest filters results.\n this.filterIncrement = 0;\n\n setOptions(this, options);\n\n\n function tileLoadedHandler(event) {\n var processors = getFiltersProcessors(self, event.tiledImage);\n if (processors.length === 0) {\n return;\n }\n var tile = event.tile;\n var image = event.image;\n if (image !== null) {\n var canvas = window.document.createElement('canvas');\n canvas.width = image.width;\n canvas.height = image.height;\n var context = canvas.getContext('2d');\n context.drawImage(image, 0, 0);\n tile._renderedContext = context;\n var callback = event.getCompletionCallback();\n applyFilters(context, processors, callback);\n tile._filterIncrement = self.filterIncrement;\n }\n }\n\n\n function applyFilters(context, filtersProcessors, callback) {\n if (callback) {\n var currentIncrement = self.filterIncrement;\n var callbacks = [];\n for (var i = 0; i < filtersProcessors.length - 1; i++) {\n (function(i) {\n callbacks[i] = function() {\n // If the increment has changed, stop the computation\n // chain immediately.\n if (self.filterIncrement !== currentIncrement) {\n return;\n }\n filtersProcessors[i + 1](context, callbacks[i + 1]);\n };\n })(i);\n }\n callbacks[filtersProcessors.length - 1] = function() {\n // If the increment has changed, do not call the callback.\n // (We don't want OSD to draw an outdated tile in the canvas).\n if (self.filterIncrement !== currentIncrement) {\n return;\n }\n callback();\n };\n filtersProcessors[0](context, callbacks[0]);\n } else {\n for (var i = 0; i < filtersProcessors.length; i++) {\n filtersProcessors[i](context, function() {\n });\n }\n }\n }\n\n function tileDrawingHandler(event) {\n var tile = event.tile;\n var rendered = event.rendered;\n if (rendered._filterIncrement === self.filterIncrement) {\n return;\n }\n var processors = getFiltersProcessors(self, event.tiledImage);\n if (processors.length === 0) {\n if (rendered._originalImageData) {\n // Restore initial data.\n rendered.putImageData(rendered._originalImageData, 0, 0);\n delete rendered._originalImageData;\n }\n rendered._filterIncrement = self.filterIncrement;\n return;\n }\n\n if (rendered._originalImageData) {\n // The tile has been previously filtered (by another filter),\n // restore it first.\n rendered.putImageData(rendered._originalImageData, 0, 0);\n } else {\n rendered._originalImageData = rendered.getImageData(\n 0, 0, rendered.canvas.width, rendered.canvas.height);\n }\n\n if (tile._renderedContext) {\n if (tile._filterIncrement === self.filterIncrement) {\n var imgData = tile._renderedContext.getImageData(0, 0,\n tile._renderedContext.canvas.width,\n tile._renderedContext.canvas.height);\n rendered.putImageData(imgData, 0, 0);\n delete tile._renderedContext;\n delete tile._filterIncrement;\n rendered._filterIncrement = self.filterIncrement;\n return;\n }\n delete tile._renderedContext;\n delete tile._filterIncrement;\n }\n applyFilters(rendered, processors);\n rendered._filterIncrement = self.filterIncrement;\n }\n };\n\n function setOptions(instance, options) {\n options = options || {};\n var filters = options.filters;\n instance.filters = !filters ? [] :\n $.isArray(filters) ? filters : [filters];\n for (var i = 0; i < instance.filters.length; i++) {\n var filter = instance.filters[i];\n if (!filter.processors) {\n throw new Error('Filter processors must be specified.');\n }\n filter.processors = $.isArray(filter.processors) ?\n filter.processors : [filter.processors];\n }\n instance.filterIncrement++;\n\n if (options.loadMode === 'sync') {\n instance.viewer.forceRedraw();\n } else {\n var itemsToReset = [];\n for (var i = 0; i < instance.filters.length; i++) {\n var filter = instance.filters[i];\n if (!filter.items) {\n itemsToReset = getAllItems(instance.viewer.world);\n break;\n }\n if ($.isArray(filter.items)) {\n for (var j = 0; j < filter.items.length; j++) {\n addItemToReset(filter.items[j], itemsToReset);\n }\n } else {\n addItemToReset(filter.items, itemsToReset);\n }\n }\n for (var i = 0; i < itemsToReset.length; i++) {\n itemsToReset[i].reset();\n }\n }\n }\n\n function addItemToReset(item, itemsToReset) {\n if (itemsToReset.indexOf(item) >= 0) {\n throw new Error('An item can not have filters ' +\n 'assigned multiple times.');\n }\n itemsToReset.push(item);\n }\n\n function getAllItems(world) {\n var result = [];\n for (var i = 0; i < world.getItemCount(); i++) {\n result.push(world.getItemAt(i));\n }\n return result;\n }\n\n function getFiltersProcessors(instance, item) {\n if (instance.filters.length === 0) {\n return [];\n }\n\n var globalProcessors = null;\n for (var i = 0; i < instance.filters.length; i++) {\n var filter = instance.filters[i];\n if (!filter.items) {\n globalProcessors = filter.processors;\n } else if (filter.items === item ||\n $.isArray(filter.items) && filter.items.indexOf(item) >= 0) {\n return filter.processors;\n }\n }\n return globalProcessors ? globalProcessors : [];\n }\n\n $.Filters = {\n THRESHOLDING: function(threshold) {\n if (threshold < 0 || threshold > 255) {\n throw new Error('Threshold must be between 0 and 255.');\n }\n return function(context, callback) {\n var imgData = context.getImageData(\n 0, 0, context.canvas.width, context.canvas.height);\n var pixels = imgData.data;\n for (var i = 0; i < pixels.length; i += 4) {\n var r = pixels[i];\n var g = pixels[i + 1];\n var b = pixels[i + 2];\n var v = (r + g + b) / 3;\n pixels[i] = pixels[i + 1] = pixels[i + 2] =\n v < threshold ? 0 : 255;\n }\n context.putImageData(imgData, 0, 0);\n callback();\n };\n },\n BRIGHTNESS: function(adjustment) {\n if (adjustment < -255 || adjustment > 255) {\n throw new Error(\n 'Brightness adjustment must be between -255 and 255.');\n }\n return function(context, callback) {\n var imgData = context.getImageData(\n 0, 0, context.canvas.width, context.canvas.height);\n var pixels = imgData.data;\n for (var i = 0; i < pixels.length; i += 4) {\n pixels[i] += adjustment;\n pixels[i + 1] += adjustment;\n pixels[i + 2] += adjustment;\n }\n context.putImageData(imgData, 0, 0);\n callback();\n };\n },\n CONTRAST: function(adjustment) {\n if (adjustment < 0) {\n throw new Error('Contrast adjustment must be positive.');\n }\n return function(context, callback) {\n var imgData = context.getImageData(\n 0, 0, context.canvas.width, context.canvas.height);\n var pixels = imgData.data;\n for (var i = 0; i < pixels.length; i += 4) {\n pixels[i] *= adjustment;\n pixels[i + 1] *= adjustment;\n pixels[i + 2] *= adjustment;\n }\n context.putImageData(imgData, 0, 0);\n callback();\n };\n },\n GAMMA: function(adjustment) {\n if (adjustment < 0) {\n throw new Error('Gamma adjustment must be positive.');\n }\n return function(context, callback) {\n var imgData = context.getImageData(\n 0, 0, context.canvas.width, context.canvas.height);\n var pixels = imgData.data;\n for (var i = 0; i < pixels.length; i += 4) {\n pixels[i] = Math.pow(pixels[i] / 255, adjustment) * 255;\n pixels[i + 1] =\n Math.pow(pixels[i + 1] / 255, adjustment) * 255;\n pixels[i + 2] =\n Math.pow(pixels[i + 2] / 255, adjustment) * 255;\n }\n context.putImageData(imgData, 0, 0);\n callback();\n };\n },\n GREYSCALE: function() {\n return function(context, callback) {\n var imgData = context.getImageData(\n 0, 0, context.canvas.width, context.canvas.height);\n var pixels = imgData.data;\n for (var i = 0; i < pixels.length; i += 4) {\n var val = (pixels[i] + pixels[i + 1] + pixels[i + 2]) / 3;\n pixels[i] = val;\n pixels[i + 1] = val;\n pixels[i + 2] = val;\n }\n context.putImageData(imgData, 0, 0);\n callback();\n };\n },\n INVERT: function() {\n return function(context, callback) {\n var imgData = context.getImageData(\n 0, 0, context.canvas.width, context.canvas.height);\n var pixels = imgData.data;\n for (var i = 0; i < pixels.length; i += 4) {\n pixels[i] = 255 - pixels[i];\n pixels[i + 1] = 255 - pixels[i + 1];\n pixels[i + 2] = 255 - pixels[i + 2];\n }\n context.putImageData(imgData, 0, 0);\n callback();\n };\n },\n MORPHOLOGICAL_OPERATION: function(kernelSize, comparator) {\n if (kernelSize % 2 === 0) {\n throw new Error('The kernel size must be an odd number.');\n }\n var kernelHalfSize = Math.floor(kernelSize / 2);\n\n if (!comparator) {\n throw new Error('A comparator must be defined.');\n }\n\n return function(context, callback) {\n var width = context.canvas.width;\n var height = context.canvas.height;\n var imgData = context.getImageData(0, 0, width, height);\n var originalPixels = context.getImageData(0, 0, width, height)\n .data;\n var offset;\n\n for (var y = 0; y < height; y++) {\n for (var x = 0; x < width; x++) {\n offset = (y * width + x) * 4;\n var r = originalPixels[offset];\n var g = originalPixels[offset + 1];\n var b = originalPixels[offset + 2];\n for (var j = 0; j < kernelSize; j++) {\n for (var i = 0; i < kernelSize; i++) {\n var pixelX = x + i - kernelHalfSize;\n var pixelY = y + j - kernelHalfSize;\n if (pixelX >= 0 && pixelX < width &&\n pixelY >= 0 && pixelY < height) {\n offset = (pixelY * width + pixelX) * 4;\n r = comparator(originalPixels[offset], r);\n g = comparator(\n originalPixels[offset + 1], g);\n b = comparator(\n originalPixels[offset + 2], b);\n }\n }\n }\n imgData.data[offset] = r;\n imgData.data[offset + 1] = g;\n imgData.data[offset + 2] = b;\n }\n }\n context.putImageData(imgData, 0, 0);\n callback();\n };\n },\n CONVOLUTION: function(kernel) {\n if (!$.isArray(kernel)) {\n throw new Error('The kernel must be an array.');\n }\n var kernelSize = Math.sqrt(kernel.length);\n if ((kernelSize + 1) % 2 !== 0) {\n throw new Error('The kernel must be a square matrix with odd' +\n 'width and height.');\n }\n var kernelHalfSize = (kernelSize - 1) / 2;\n\n return function(context, callback) {\n var width = context.canvas.width;\n var height = context.canvas.height;\n var imgData = context.getImageData(0, 0, width, height);\n var originalPixels = context.getImageData(0, 0, width, height)\n .data;\n var offset;\n\n for (var y = 0; y < height; y++) {\n for (var x = 0; x < width; x++) {\n var r = 0;\n var g = 0;\n var b = 0;\n for (var j = 0; j < kernelSize; j++) {\n for (var i = 0; i < kernelSize; i++) {\n var pixelX = x + i - kernelHalfSize;\n var pixelY = y + j - kernelHalfSize;\n if (pixelX >= 0 && pixelX < width &&\n pixelY >= 0 && pixelY < height) {\n offset = (pixelY * width + pixelX) * 4;\n var weight = kernel[j * kernelSize + i];\n r += originalPixels[offset] * weight;\n g += originalPixels[offset + 1] * weight;\n b += originalPixels[offset + 2] * weight;\n }\n }\n }\n offset = (y * width + x) * 4;\n imgData.data[offset] = r;\n imgData.data[offset + 1] = g;\n imgData.data[offset + 2] = b;\n }\n }\n context.putImageData(imgData, 0, 0);\n callback();\n };\n }\n };\n\n}());\n","// Generated by CoffeeScript 1.6.2\n(function() {\n var $, Analyze, Blender, Calculate, Caman, CamanParser, Canvas, Convert, Event, Fiber, Filter, IO, Image, Layer, Log, Module, Pixel, Plugin, Renderer, Root, Store, Util, fs, moduleKeywords, slice, vignetteFilters,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },\n __slice = [].slice,\n __hasProp = {}.hasOwnProperty,\n __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n moduleKeywords = ['extended', 'included'];\n\n Module = (function() {\n function Module() {}\n\n Module[\"extends\"] = function(obj) {\n var key, value, _ref;\n\n for (key in obj) {\n value = obj[key];\n if (__indexOf.call(moduleKeywords, key) < 0) {\n this[key] = value;\n }\n }\n if ((_ref = obj.extended) != null) {\n _ref.apply(this);\n }\n return this;\n };\n\n Module.includes = function(obj) {\n var key, value, _ref;\n\n for (key in obj) {\n value = obj[key];\n if (__indexOf.call(moduleKeywords, key) < 0) {\n this.prototype[key] = value;\n }\n }\n if ((_ref = obj.included) != null) {\n _ref.apply(this);\n }\n return this;\n };\n\n Module.delegate = function() {\n var args, source, target, _i, _len, _results;\n\n args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n target = args.pop();\n _results = [];\n for (_i = 0, _len = args.length; _i < _len; _i++) {\n source = args[_i];\n _results.push(this.prototype[source] = target.prototype[source]);\n }\n return _results;\n };\n\n Module.aliasFunction = function(to, from) {\n var _this = this;\n\n return this.prototype[to] = function() {\n var args;\n\n args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n return _this.prototype[from].apply(_this, args);\n };\n };\n\n Module.aliasProperty = function(to, from) {\n return Object.defineProperty(this.prototype, to, {\n get: function() {\n return this[from];\n },\n set: function(val) {\n return this[from] = val;\n }\n });\n };\n\n Module.included = function(func) {\n return func.call(this, this.prototype);\n };\n\n return Module;\n\n })();\n\n slice = Array.prototype.slice;\n\n $ = function(sel, root) {\n if (root == null) {\n root = document;\n }\n if (typeof sel === \"object\" || (typeof exports !== \"undefined\" && exports !== null)) {\n return sel;\n }\n return root.querySelector(sel);\n };\n\n Util = (function() {\n function Util() {}\n\n Util.uniqid = (function() {\n var id;\n\n id = 0;\n return {\n get: function() {\n return id++;\n }\n };\n })();\n\n Util.extend = function() {\n var copy, dest, obj, prop, src, _i, _len;\n\n obj = arguments[0], src = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n dest = obj;\n for (_i = 0, _len = src.length; _i < _len; _i++) {\n copy = src[_i];\n for (prop in copy) {\n if (!__hasProp.call(copy, prop)) continue;\n dest[prop] = copy[prop];\n }\n }\n return dest;\n };\n\n Util.clampRGB = function(val) {\n if (val < 0) {\n return 0;\n }\n if (val > 255) {\n return 255;\n }\n return val;\n };\n\n Util.copyAttributes = function(from, to, opts) {\n var attr, _i, _len, _ref, _ref1, _results;\n\n if (opts == null) {\n opts = {};\n }\n _ref = from.attributes;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n attr = _ref[_i];\n if ((opts.except != null) && (_ref1 = attr.nodeName, __indexOf.call(opts.except, _ref1) >= 0)) {\n continue;\n }\n _results.push(to.setAttribute(attr.nodeName, attr.nodeValue));\n }\n return _results;\n };\n\n Util.dataArray = function(length) {\n if (length == null) {\n length = 0;\n }\n if (Caman.NodeJS || (window.Uint8Array != null)) {\n return new Uint8Array(length);\n }\n return new Array(length);\n };\n\n return Util;\n\n })();\n\n if (typeof exports !== \"undefined\" && exports !== null) {\n Root = exports;\n Canvas = require('canvas');\n Image = Canvas.Image;\n Fiber = require('fibers');\n fs = require('fs');\n } else {\n Root = window;\n }\n\n Caman = (function(_super) {\n __extends(Caman, _super);\n\n Caman.version = {\n release: \"4.1.2\",\n date: \"7/27/2013\"\n };\n\n Caman.DEBUG = false;\n\n Caman.allowRevert = true;\n\n Caman.crossOrigin = \"anonymous\";\n\n Caman.remoteProxy = \"\";\n\n Caman.proxyParam = \"camanProxyUrl\";\n\n Caman.NodeJS = typeof exports !== \"undefined\" && exports !== null;\n\n Caman.autoload = !Caman.NodeJS;\n\n Caman.toString = function() {\n return \"Version \" + Caman.version.release + \", Released \" + Caman.version.date;\n };\n\n Caman.getAttrId = function(canvas) {\n if (Caman.NodeJS) {\n return true;\n }\n if (typeof canvas === \"string\") {\n canvas = $(canvas);\n }\n if (!((canvas != null) && (canvas.getAttribute != null))) {\n return null;\n }\n return canvas.getAttribute('data-caman-id');\n };\n\n function Caman() {\n this.nodeFileReady = __bind(this.nodeFileReady, this);\n var args, callback, id,\n _this = this;\n\n if (arguments.length === 0) {\n throw \"Invalid arguments\";\n }\n if (this instanceof Caman) {\n this.finishInit = this.finishInit.bind(this);\n this.imageLoaded = this.imageLoaded.bind(this);\n args = arguments[0];\n if (!Caman.NodeJS) {\n id = parseInt(Caman.getAttrId(args[0]), 10);\n callback = typeof args[1] === \"function\" ? args[1] : typeof args[2] === \"function\" ? args[2] : function() {};\n if (!isNaN(id) && Store.has(id)) {\n return Store.execute(id, callback);\n }\n }\n this.id = Util.uniqid.get();\n this.initializedPixelData = this.originalPixelData = null;\n this.cropCoordinates = {\n x: 0,\n y: 0\n };\n this.cropped = false;\n this.resized = false;\n this.pixelStack = [];\n this.layerStack = [];\n this.canvasQueue = [];\n this.currentLayer = null;\n this.scaled = false;\n this.analyze = new Analyze(this);\n this.renderer = new Renderer(this);\n this.domIsLoaded(function() {\n _this.parseArguments(args);\n return _this.setup();\n });\n return this;\n } else {\n return new Caman(arguments);\n }\n }\n\n Caman.prototype.domIsLoaded = function(cb) {\n var listener,\n _this = this;\n\n if (Caman.NodeJS) {\n return setTimeout(function() {\n return cb.call(_this);\n }, 0);\n } else {\n if (document.readyState === \"complete\") {\n Log.debug(\"DOM initialized\");\n return setTimeout(function() {\n return cb.call(_this);\n }, 0);\n } else {\n listener = function() {\n if (document.readyState === \"complete\") {\n Log.debug(\"DOM initialized\");\n return cb.call(_this);\n }\n };\n return document.addEventListener(\"readystatechange\", listener, false);\n }\n }\n };\n\n Caman.prototype.parseArguments = function(args) {\n var key, val, _ref, _results;\n\n if (args.length === 0) {\n throw \"Invalid arguments given\";\n }\n this.initObj = null;\n this.initType = null;\n this.imageUrl = null;\n this.callback = function() {};\n this.setInitObject(args[0]);\n if (args.length === 1) {\n return;\n }\n switch (typeof args[1]) {\n case \"string\":\n this.imageUrl = args[1];\n break;\n case \"function\":\n this.callback = args[1];\n }\n if (args.length === 2) {\n return;\n }\n this.callback = args[2];\n if (args.length === 4) {\n _ref = args[4];\n _results = [];\n for (key in _ref) {\n if (!__hasProp.call(_ref, key)) continue;\n val = _ref[key];\n _results.push(this.options[key] = val);\n }\n return _results;\n }\n };\n\n Caman.prototype.setInitObject = function(obj) {\n if (Caman.NodeJS) {\n this.initObj = obj;\n this.initType = 'node';\n return;\n }\n if (typeof obj === \"object\") {\n this.initObj = obj;\n } else {\n this.initObj = $(obj);\n }\n if (this.initObj == null) {\n throw \"Could not find image or canvas for initialization.\";\n }\n return this.initType = this.initObj.nodeName.toLowerCase();\n };\n\n Caman.prototype.setup = function() {\n switch (this.initType) {\n case \"node\":\n return this.initNode();\n case \"img\":\n return this.initImage();\n case \"canvas\":\n return this.initCanvas();\n }\n };\n\n Caman.prototype.initNode = function() {\n Log.debug(\"Initializing for NodeJS\");\n if (typeof this.initObj === \"string\") {\n return fs.readFile(this.initObj, this.nodeFileReady);\n } else {\n return this.nodeFileReady(null, this.initObj);\n }\n };\n\n Caman.prototype.nodeFileReady = function(err, data) {\n if (err) {\n throw err;\n }\n this.image = new Image();\n this.image.src = data;\n Log.debug(\"Image loaded. Width = \" + (this.imageWidth()) + \", Height = \" + (this.imageHeight()));\n this.canvas = new Canvas(this.imageWidth(), this.imageHeight());\n return this.finishInit();\n };\n\n Caman.prototype.initImage = function() {\n this.image = this.initObj;\n this.canvas = document.createElement('canvas');\n this.context = this.canvas.getContext('2d');\n Util.copyAttributes(this.image, this.canvas, {\n except: ['src']\n });\n this.image.parentNode.replaceChild(this.canvas, this.image);\n this.imageAdjustments();\n return this.waitForImageLoaded();\n };\n\n Caman.prototype.initCanvas = function() {\n this.canvas = this.initObj;\n this.context = this.canvas.getContext('2d');\n if (this.imageUrl != null) {\n this.image = document.createElement('img');\n this.image.src = this.imageUrl;\n this.imageAdjustments();\n return this.waitForImageLoaded();\n } else {\n return this.finishInit();\n }\n };\n\n Caman.prototype.imageAdjustments = function() {\n if (this.needsHiDPISwap()) {\n Log.debug(this.image.src, \"->\", this.hiDPIReplacement());\n this.swapped = true;\n this.image.src = this.hiDPIReplacement();\n }\n if (IO.isRemote(this.image)) {\n this.image.src = IO.proxyUrl(this.image.src);\n return Log.debug(\"Remote image detected, using URL = \" + this.image.src);\n }\n };\n\n Caman.prototype.waitForImageLoaded = function() {\n if (this.isImageLoaded()) {\n return this.imageLoaded();\n } else {\n return this.image.onload = this.imageLoaded;\n }\n };\n\n Caman.prototype.isImageLoaded = function() {\n if (!this.image.complete) {\n return false;\n }\n if ((this.image.naturalWidth != null) && this.image.naturalWidth === 0) {\n return false;\n }\n return true;\n };\n\n Caman.prototype.imageWidth = function() {\n return this.image.width || this.image.naturalWidth;\n };\n\n Caman.prototype.imageHeight = function() {\n return this.image.height || this.image.naturalHeight;\n };\n\n Caman.prototype.imageLoaded = function() {\n Log.debug(\"Image loaded. Width = \" + (this.imageWidth()) + \", Height = \" + (this.imageHeight()));\n if (this.swapped) {\n this.canvas.width = this.imageWidth() / this.hiDPIRatio();\n this.canvas.height = this.imageHeight() / this.hiDPIRatio();\n } else {\n this.canvas.width = this.imageWidth();\n this.canvas.height = this.imageHeight();\n }\n return this.finishInit();\n };\n\n Caman.prototype.finishInit = function() {\n var i, pixel, _i, _len, _ref;\n\n if (this.context == null) {\n this.context = this.canvas.getContext('2d');\n }\n this.originalWidth = this.preScaledWidth = this.width = this.canvas.width;\n this.originalHeight = this.preScaledHeight = this.height = this.canvas.height;\n this.hiDPIAdjustments();\n if (!this.hasId()) {\n this.assignId();\n }\n if (this.image != null) {\n this.context.drawImage(this.image, 0, 0, this.imageWidth(), this.imageHeight(), 0, 0, this.preScaledWidth, this.preScaledHeight);\n }\n this.imageData = this.context.getImageData(0, 0, this.canvas.width, this.canvas.height);\n this.pixelData = this.imageData.data;\n if (Caman.allowRevert) {\n this.initializedPixelData = Util.dataArray(this.pixelData.length);\n this.originalPixelData = Util.dataArray(this.pixelData.length);\n _ref = this.pixelData;\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n pixel = _ref[i];\n this.initializedPixelData[i] = pixel;\n this.originalPixelData[i] = pixel;\n }\n }\n this.dimensions = {\n width: this.canvas.width,\n height: this.canvas.height\n };\n if (!Caman.NodeJS) {\n Store.put(this.id, this);\n }\n this.callback.call(this, this);\n return this.callback = function() {};\n };\n\n Caman.prototype.reloadCanvasData = function() {\n this.imageData = this.context.getImageData(0, 0, this.canvas.width, this.canvas.height);\n return this.pixelData = this.imageData.data;\n };\n\n Caman.prototype.resetOriginalPixelData = function() {\n var i, pixel, _i, _len, _ref, _results;\n\n if (!Caman.allowRevert) {\n throw \"Revert disabled\";\n }\n this.originalPixelData = Util.dataArray(this.pixelData.length);\n _ref = this.pixelData;\n _results = [];\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n pixel = _ref[i];\n _results.push(this.originalPixelData[i] = pixel);\n }\n return _results;\n };\n\n Caman.prototype.hasId = function() {\n return Caman.getAttrId(this.canvas) != null;\n };\n\n Caman.prototype.assignId = function() {\n if (Caman.NodeJS || this.canvas.getAttribute('data-caman-id')) {\n return;\n }\n return this.canvas.setAttribute('data-caman-id', this.id);\n };\n\n Caman.prototype.hiDPIDisabled = function() {\n return this.canvas.getAttribute('data-caman-hidpi-disabled') !== null;\n };\n\n Caman.prototype.hiDPIAdjustments = function() {\n var ratio;\n\n if (Caman.NodeJS || !this.needsHiDPISwap()) {\n return;\n }\n ratio = this.hiDPIRatio();\n if (ratio !== 1) {\n Log.debug(\"HiDPI ratio = \" + ratio);\n this.scaled = true;\n this.preScaledWidth = this.canvas.width;\n this.preScaledHeight = this.canvas.height;\n this.canvas.width = this.preScaledWidth * ratio;\n this.canvas.height = this.preScaledHeight * ratio;\n this.canvas.style.width = \"\" + this.preScaledWidth + \"px\";\n this.canvas.style.height = \"\" + this.preScaledHeight + \"px\";\n this.context.scale(ratio, ratio);\n this.width = this.originalWidth = this.canvas.width;\n return this.height = this.originalHeight = this.canvas.height;\n }\n };\n\n Caman.prototype.hiDPIRatio = function() {\n var backingStoreRatio, devicePixelRatio;\n\n devicePixelRatio = window.devicePixelRatio || 1;\n backingStoreRatio = this.context.webkitBackingStorePixelRatio || this.context.mozBackingStorePixelRatio || this.context.msBackingStorePixelRatio || this.context.oBackingStorePixelRatio || this.context.backingStorePixelRatio || 1;\n return devicePixelRatio / backingStoreRatio;\n };\n\n Caman.prototype.hiDPICapable = function() {\n return (window.devicePixelRatio != null) && window.devicePixelRatio !== 1;\n };\n\n Caman.prototype.needsHiDPISwap = function() {\n if (this.hiDPIDisabled() || !this.hiDPICapable()) {\n return false;\n }\n return this.hiDPIReplacement() !== null;\n };\n\n Caman.prototype.hiDPIReplacement = function() {\n if (this.image == null) {\n return null;\n }\n return this.image.getAttribute('data-caman-hidpi');\n };\n\n Caman.prototype.replaceCanvas = function(newCanvas) {\n var oldCanvas;\n\n oldCanvas = this.canvas;\n this.canvas = newCanvas;\n this.context = this.canvas.getContext('2d');\n if (!Caman.NodeJS) {\n oldCanvas.parentNode.replaceChild(this.canvas, oldCanvas);\n }\n this.width = this.canvas.width;\n this.height = this.canvas.height;\n this.reloadCanvasData();\n return this.dimensions = {\n width: this.canvas.width,\n height: this.canvas.height\n };\n };\n\n Caman.prototype.render = function(callback) {\n var _this = this;\n\n if (callback == null) {\n callback = function() {};\n }\n Event.trigger(this, \"renderStart\");\n return this.renderer.execute(function() {\n _this.context.putImageData(_this.imageData, 0, 0);\n return callback.call(_this);\n });\n };\n\n Caman.prototype.revert = function(updateContext) {\n var i, pixel, _i, _len, _ref;\n\n if (updateContext == null) {\n updateContext = true;\n }\n if (!Caman.allowRevert) {\n throw \"Revert disabled\";\n }\n _ref = this.originalVisiblePixels();\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n pixel = _ref[i];\n this.pixelData[i] = pixel;\n }\n if (updateContext) {\n return this.context.putImageData(this.imageData, 0, 0);\n }\n };\n\n Caman.prototype.reset = function() {\n var canvas, ctx, i, imageData, pixel, pixelData, _i, _len, _ref;\n\n canvas = document.createElement('canvas');\n Util.copyAttributes(this.canvas, canvas);\n canvas.width = this.originalWidth;\n canvas.height = this.originalHeight;\n ctx = canvas.getContext('2d');\n imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n pixelData = imageData.data;\n _ref = this.initializedPixelData;\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n pixel = _ref[i];\n pixelData[i] = pixel;\n }\n ctx.putImageData(imageData, 0, 0);\n this.cropCoordinates = {\n x: 0,\n y: 0\n };\n this.resized = false;\n return this.replaceCanvas(canvas);\n };\n\n Caman.prototype.originalVisiblePixels = function() {\n var canvas, coord, ctx, endX, endY, i, imageData, pixel, pixelData, pixels, scaledCanvas, startX, startY, width, _i, _j, _len, _ref, _ref1, _ref2, _ref3;\n\n if (!Caman.allowRevert) {\n throw \"Revert disabled\";\n }\n pixels = [];\n startX = this.cropCoordinates.x;\n endX = startX + this.width;\n startY = this.cropCoordinates.y;\n endY = startY + this.height;\n if (this.resized) {\n canvas = document.createElement('canvas');\n canvas.width = this.originalWidth;\n canvas.height = this.originalHeight;\n ctx = canvas.getContext('2d');\n imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n pixelData = imageData.data;\n _ref = this.originalPixelData;\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n pixel = _ref[i];\n pixelData[i] = pixel;\n }\n ctx.putImageData(imageData, 0, 0);\n scaledCanvas = document.createElement('canvas');\n scaledCanvas.width = this.width;\n scaledCanvas.height = this.height;\n ctx = scaledCanvas.getContext('2d');\n ctx.drawImage(canvas, 0, 0, this.originalWidth, this.originalHeight, 0, 0, this.width, this.height);\n pixelData = ctx.getImageData(0, 0, this.width, this.height).data;\n width = this.width;\n } else {\n pixelData = this.originalPixelData;\n width = this.originalWidth;\n }\n for (i = _j = 0, _ref1 = pixelData.length; _j < _ref1; i = _j += 4) {\n coord = Pixel.locationToCoordinates(i, width);\n if (((startX <= (_ref2 = coord.x) && _ref2 < endX)) && ((startY <= (_ref3 = coord.y) && _ref3 < endY))) {\n pixels.push(pixelData[i], pixelData[i + 1], pixelData[i + 2], pixelData[i + 3]);\n }\n }\n return pixels;\n };\n\n Caman.prototype.process = function(name, processFn) {\n this.renderer.add({\n type: Filter.Type.Single,\n name: name,\n processFn: processFn\n });\n return this;\n };\n\n Caman.prototype.processKernel = function(name, adjust, divisor, bias) {\n var i, _i, _ref;\n\n if (divisor == null) {\n divisor = null;\n }\n if (bias == null) {\n bias = 0;\n }\n if (divisor == null) {\n divisor = 0;\n for (i = _i = 0, _ref = adjust.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n divisor += adjust[i];\n }\n }\n this.renderer.add({\n type: Filter.Type.Kernel,\n name: name,\n adjust: adjust,\n divisor: divisor,\n bias: bias\n });\n return this;\n };\n\n Caman.prototype.processPlugin = function(plugin, args) {\n this.renderer.add({\n type: Filter.Type.Plugin,\n plugin: plugin,\n args: args\n });\n return this;\n };\n\n Caman.prototype.newLayer = function(callback) {\n var layer;\n\n layer = new Layer(this);\n this.canvasQueue.push(layer);\n this.renderer.add({\n type: Filter.Type.LayerDequeue\n });\n callback.call(layer);\n this.renderer.add({\n type: Filter.Type.LayerFinished\n });\n return this;\n };\n\n Caman.prototype.executeLayer = function(layer) {\n return this.pushContext(layer);\n };\n\n Caman.prototype.pushContext = function(layer) {\n this.layerStack.push(this.currentLayer);\n this.pixelStack.push(this.pixelData);\n this.currentLayer = layer;\n return this.pixelData = layer.pixelData;\n };\n\n Caman.prototype.popContext = function() {\n this.pixelData = this.pixelStack.pop();\n return this.currentLayer = this.layerStack.pop();\n };\n\n Caman.prototype.applyCurrentLayer = function() {\n return this.currentLayer.applyToParent();\n };\n\n return Caman;\n\n })(Module);\n\n Root.Caman = Caman;\n\n Caman.Analyze = (function() {\n function Analyze(c) {\n this.c = c;\n }\n\n Analyze.prototype.calculateLevels = function() {\n var i, levels, numPixels, _i, _j, _k, _ref;\n\n levels = {\n r: {},\n g: {},\n b: {}\n };\n for (i = _i = 0; _i <= 255; i = ++_i) {\n levels.r[i] = 0;\n levels.g[i] = 0;\n levels.b[i] = 0;\n }\n for (i = _j = 0, _ref = this.c.pixelData.length; _j < _ref; i = _j += 4) {\n levels.r[this.c.pixelData[i]]++;\n levels.g[this.c.pixelData[i + 1]]++;\n levels.b[this.c.pixelData[i + 2]]++;\n }\n numPixels = this.c.pixelData.length / 4;\n for (i = _k = 0; _k <= 255; i = ++_k) {\n levels.r[i] /= numPixels;\n levels.g[i] /= numPixels;\n levels.b[i] /= numPixels;\n }\n return levels;\n };\n\n return Analyze;\n\n })();\n\n Analyze = Caman.Analyze;\n\n Caman.DOMUpdated = function() {\n var img, imgs, parser, _i, _len, _results;\n\n imgs = document.querySelectorAll(\"img[data-caman]\");\n if (!(imgs.length > 0)) {\n return;\n }\n _results = [];\n for (_i = 0, _len = imgs.length; _i < _len; _i++) {\n img = imgs[_i];\n _results.push(parser = new CamanParser(img, function() {\n this.parse();\n return this.execute();\n }));\n }\n return _results;\n };\n\n if (Caman.autoload) {\n (function() {\n if (document.readyState === \"complete\") {\n return Caman.DOMUpdated();\n } else {\n return document.addEventListener(\"DOMContentLoaded\", Caman.DOMUpdated, false);\n }\n })();\n }\n\n CamanParser = (function() {\n var INST_REGEX;\n\n INST_REGEX = \"(\\\\w+)\\\\((.*?)\\\\)\";\n\n function CamanParser(ele, ready) {\n this.dataStr = ele.getAttribute('data-caman');\n this.caman = Caman(ele, ready.bind(this));\n }\n\n CamanParser.prototype.parse = function() {\n var args, e, filter, func, inst, instFunc, m, r, unparsedInstructions, _i, _len, _ref, _results;\n\n this.ele = this.caman.canvas;\n r = new RegExp(INST_REGEX, 'g');\n unparsedInstructions = this.dataStr.match(r);\n if (!(unparsedInstructions.length > 0)) {\n return;\n }\n r = new RegExp(INST_REGEX);\n _results = [];\n for (_i = 0, _len = unparsedInstructions.length; _i < _len; _i++) {\n inst = unparsedInstructions[_i];\n _ref = inst.match(r), m = _ref[0], filter = _ref[1], args = _ref[2];\n instFunc = new Function(\"return function() { this.\" + filter + \"(\" + args + \"); };\");\n try {\n func = instFunc();\n _results.push(func.call(this.caman));\n } catch (_error) {\n e = _error;\n _results.push(Log.debug(e));\n }\n }\n return _results;\n };\n\n CamanParser.prototype.execute = function() {\n var ele;\n\n ele = this.ele;\n return this.caman.render(function() {\n return ele.parentNode.replaceChild(this.toImage(), ele);\n });\n };\n\n return CamanParser;\n\n })();\n\n Caman.Blender = (function() {\n function Blender() {}\n\n Blender.blenders = {};\n\n Blender.register = function(name, func) {\n return this.blenders[name] = func;\n };\n\n Blender.execute = function(name, rgbaLayer, rgbaParent) {\n return this.blenders[name](rgbaLayer, rgbaParent);\n };\n\n return Blender;\n\n })();\n\n Blender = Caman.Blender;\n\n Caman.Calculate = (function() {\n function Calculate() {}\n\n Calculate.distance = function(x1, y1, x2, y2) {\n return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n };\n\n Calculate.randomRange = function(min, max, getFloat) {\n var rand;\n\n if (getFloat == null) {\n getFloat = false;\n }\n rand = min + (Math.random() * (max - min));\n if (getFloat) {\n return rand.toFixed(getFloat);\n } else {\n return Math.round(rand);\n }\n };\n\n Calculate.luminance = function(rgba) {\n return (0.299 * rgba.r) + (0.587 * rgba.g) + (0.114 * rgba.b);\n };\n\n Calculate.bezier = function(start, ctrl1, ctrl2, end, lowBound, highBound) {\n var Ax, Ay, Bx, By, Cx, Cy, bezier, curveX, curveY, i, j, leftCoord, rightCoord, t, x0, x1, x2, x3, y0, y1, y2, y3, _i, _j, _k, _ref, _ref1;\n\n x0 = start[0];\n y0 = start[1];\n x1 = ctrl1[0];\n y1 = ctrl1[1];\n x2 = ctrl2[0];\n y2 = ctrl2[1];\n x3 = end[0];\n y3 = end[1];\n bezier = {};\n Cx = parseInt(3 * (x1 - x0), 10);\n Bx = 3 * (x2 - x1) - Cx;\n Ax = x3 - x0 - Cx - Bx;\n Cy = 3 * (y1 - y0);\n By = 3 * (y2 - y1) - Cy;\n Ay = y3 - y0 - Cy - By;\n for (i = _i = 0; _i < 1000; i = ++_i) {\n t = i / 1000;\n curveX = Math.round((Ax * Math.pow(t, 3)) + (Bx * Math.pow(t, 2)) + (Cx * t) + x0);\n curveY = Math.round((Ay * Math.pow(t, 3)) + (By * Math.pow(t, 2)) + (Cy * t) + y0);\n if (lowBound && curveY < lowBound) {\n curveY = lowBound;\n } else if (highBound && curveY > highBound) {\n curveY = highBound;\n }\n bezier[curveX] = curveY;\n }\n if (bezier.length < end[0] + 1) {\n for (i = _j = 0, _ref = end[0]; 0 <= _ref ? _j <= _ref : _j >= _ref; i = 0 <= _ref ? ++_j : --_j) {\n if (bezier[i] == null) {\n leftCoord = [i - 1, bezier[i - 1]];\n for (j = _k = i, _ref1 = end[0]; i <= _ref1 ? _k <= _ref1 : _k >= _ref1; j = i <= _ref1 ? ++_k : --_k) {\n if (bezier[j] != null) {\n rightCoord = [j, bezier[j]];\n break;\n }\n }\n bezier[i] = leftCoord[1] + ((rightCoord[1] - leftCoord[1]) / (rightCoord[0] - leftCoord[0])) * (i - leftCoord[0]);\n }\n }\n }\n if (bezier[end[0]] == null) {\n bezier[end[0]] = bezier[end[0] - 1];\n }\n return bezier;\n };\n\n return Calculate;\n\n })();\n\n Calculate = Caman.Calculate;\n\n Caman.Convert = (function() {\n function Convert() {}\n\n Convert.hexToRGB = function(hex) {\n var b, g, r;\n\n if (hex.charAt(0) === \"#\") {\n hex = hex.substr(1);\n }\n r = parseInt(hex.substr(0, 2), 16);\n g = parseInt(hex.substr(2, 2), 16);\n b = parseInt(hex.substr(4, 2), 16);\n return {\n r: r,\n g: g,\n b: b\n };\n };\n\n Convert.rgbToHSL = function(r, g, b) {\n var d, h, l, max, min, s;\n\n if (typeof r === \"object\") {\n g = r.g;\n b = r.b;\n r = r.r;\n }\n r /= 255;\n g /= 255;\n b /= 255;\n max = Math.max(r, g, b);\n min = Math.min(r, g, b);\n l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = (function() {\n switch (max) {\n case r:\n return (g - b) / d + (g < b ? 6 : 0);\n case g:\n return (b - r) / d + 2;\n case b:\n return (r - g) / d + 4;\n }\n })();\n h /= 6;\n }\n return {\n h: h,\n s: s,\n l: l\n };\n };\n\n Convert.hslToRGB = function(h, s, l) {\n var b, g, p, q, r;\n\n if (typeof h === \"object\") {\n s = h.s;\n l = h.l;\n h = h.h;\n }\n if (s === 0) {\n r = g = b = l;\n } else {\n q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n p = 2 * l - q;\n r = this.hueToRGB(p, q, h + 1 / 3);\n g = this.hueToRGB(p, q, h);\n b = this.hueToRGB(p, q, h - 1 / 3);\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n };\n\n Convert.hueToRGB = function(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n };\n\n Convert.rgbToHSV = function(r, g, b) {\n var d, h, max, min, s, v;\n\n r /= 255;\n g /= 255;\n b /= 255;\n max = Math.max(r, g, b);\n min = Math.min(r, g, b);\n v = max;\n d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n } else {\n h = (function() {\n switch (max) {\n case r:\n return (g - b) / d + (g < b ? 6 : 0);\n case g:\n return (b - r) / d + 2;\n case b:\n return (r - g) / d + 4;\n }\n })();\n h /= 6;\n }\n return {\n h: h,\n s: s,\n v: v\n };\n };\n\n Convert.hsvToRGB = function(h, s, v) {\n var b, f, g, i, p, q, r, t;\n\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n }\n return {\n r: Math.floor(r * 255),\n g: Math.floor(g * 255),\n b: Math.floor(b * 255)\n };\n };\n\n Convert.rgbToXYZ = function(r, g, b) {\n var x, y, z;\n\n r /= 255;\n g /= 255;\n b /= 255;\n if (r > 0.04045) {\n r = Math.pow((r + 0.055) / 1.055, 2.4);\n } else {\n r /= 12.92;\n }\n if (g > 0.04045) {\n g = Math.pow((g + 0.055) / 1.055, 2.4);\n } else {\n g /= 12.92;\n }\n if (b > 0.04045) {\n b = Math.pow((b + 0.055) / 1.055, 2.4);\n } else {\n b /= 12.92;\n }\n x = r * 0.4124 + g * 0.3576 + b * 0.1805;\n y = r * 0.2126 + g * 0.7152 + b * 0.0722;\n z = r * 0.0193 + g * 0.1192 + b * 0.9505;\n return {\n x: x * 100,\n y: y * 100,\n z: z * 100\n };\n };\n\n Convert.xyzToRGB = function(x, y, z) {\n var b, g, r;\n\n x /= 100;\n y /= 100;\n z /= 100;\n r = (3.2406 * x) + (-1.5372 * y) + (-0.4986 * z);\n g = (-0.9689 * x) + (1.8758 * y) + (0.0415 * z);\n b = (0.0557 * x) + (-0.2040 * y) + (1.0570 * z);\n if (r > 0.0031308) {\n r = (1.055 * Math.pow(r, 0.4166666667)) - 0.055;\n } else {\n r *= 12.92;\n }\n if (g > 0.0031308) {\n g = (1.055 * Math.pow(g, 0.4166666667)) - 0.055;\n } else {\n g *= 12.92;\n }\n if (b > 0.0031308) {\n b = (1.055 * Math.pow(b, 0.4166666667)) - 0.055;\n } else {\n b *= 12.92;\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n };\n\n Convert.xyzToLab = function(x, y, z) {\n var a, b, l, whiteX, whiteY, whiteZ;\n\n if (typeof x === \"object\") {\n y = x.y;\n z = x.z;\n x = x.x;\n }\n whiteX = 95.047;\n whiteY = 100.0;\n whiteZ = 108.883;\n x /= whiteX;\n y /= whiteY;\n z /= whiteZ;\n if (x > 0.008856451679) {\n x = Math.pow(x, 0.3333333333);\n } else {\n x = (7.787037037 * x) + 0.1379310345;\n }\n if (y > 0.008856451679) {\n y = Math.pow(y, 0.3333333333);\n } else {\n y = (7.787037037 * y) + 0.1379310345;\n }\n if (z > 0.008856451679) {\n z = Math.pow(z, 0.3333333333);\n } else {\n z = (7.787037037 * z) + 0.1379310345;\n }\n l = 116 * y - 16;\n a = 500 * (x - y);\n b = 200 * (y - z);\n return {\n l: l,\n a: a,\n b: b\n };\n };\n\n Convert.labToXYZ = function(l, a, b) {\n var x, y, z;\n\n if (typeof l === \"object\") {\n a = l.a;\n b = l.b;\n l = l.l;\n }\n y = (l + 16) / 116;\n x = y + (a / 500);\n z = y - (b / 200);\n if (x > 0.2068965517) {\n x = x * x * x;\n } else {\n x = 0.1284185493 * (x - 0.1379310345);\n }\n if (y > 0.2068965517) {\n y = y * y * y;\n } else {\n y = 0.1284185493 * (y - 0.1379310345);\n }\n if (z > 0.2068965517) {\n z = z * z * z;\n } else {\n z = 0.1284185493 * (z - 0.1379310345);\n }\n return {\n x: x * 95.047,\n y: y * 100.0,\n z: z * 108.883\n };\n };\n\n Convert.rgbToLab = function(r, g, b) {\n var xyz;\n\n if (typeof r === \"object\") {\n g = r.g;\n b = r.b;\n r = r.r;\n }\n xyz = this.rgbToXYZ(r, g, b);\n return this.xyzToLab(xyz);\n };\n\n Convert.labToRGB = function(l, a, b) {};\n\n return Convert;\n\n })();\n\n Convert = Caman.Convert;\n\n Caman.Event = (function() {\n function Event() {}\n\n Event.events = {};\n\n Event.types = [\"processStart\", \"processComplete\", \"renderStart\", \"renderFinished\", \"blockStarted\", \"blockFinished\"];\n\n Event.trigger = function(target, type, data) {\n var event, _i, _len, _ref, _results;\n\n if (data == null) {\n data = null;\n }\n if (this.events[type] && this.events[type].length) {\n _ref = this.events[type];\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n event = _ref[_i];\n if (event.target === null || target.id === event.target.id) {\n _results.push(event.fn.call(target, data));\n } else {\n _results.push(void 0);\n }\n }\n return _results;\n }\n };\n\n Event.listen = function(target, type, fn) {\n var _fn, _type;\n\n if (typeof target === \"string\") {\n _type = target;\n _fn = type;\n target = null;\n type = _type;\n fn = _fn;\n }\n if (__indexOf.call(this.types, type) < 0) {\n return false;\n }\n if (!this.events[type]) {\n this.events[type] = [];\n }\n this.events[type].push({\n target: target,\n fn: fn\n });\n return true;\n };\n\n return Event;\n\n })();\n\n Event = Caman.Event;\n\n Caman.Filter = (function() {\n function Filter() {}\n\n Filter.Type = {\n Single: 1,\n Kernel: 2,\n LayerDequeue: 3,\n LayerFinished: 4,\n LoadOverlay: 5,\n Plugin: 6\n };\n\n Filter.register = function(name, filterFunc) {\n return Caman.prototype[name] = filterFunc;\n };\n\n return Filter;\n\n })();\n\n Filter = Caman.Filter;\n\n Caman.IO = (function() {\n function IO() {}\n\n IO.domainRegex = /(?:(?:http|https):\\/\\/)((?:\\w+)\\.(?:(?:\\w|\\.)+))/;\n\n IO.isRemote = function(img) {\n if (img == null) {\n return false;\n }\n if (this.corsEnabled(img)) {\n return false;\n }\n return this.isURLRemote(img.src);\n };\n\n IO.corsEnabled = function(img) {\n var _ref;\n\n return (img.crossOrigin != null) && ((_ref = img.crossOrigin.toLowerCase()) === 'anonymous' || _ref === 'use-credentials');\n };\n\n IO.isURLRemote = function(url) {\n var matches;\n\n matches = url.match(this.domainRegex);\n if (matches) {\n return matches[1] !== document.domain;\n } else {\n return false;\n }\n };\n\n IO.remoteCheck = function(src) {\n if (this.isURLRemote(src)) {\n if (!Caman.remoteProxy.length) {\n Log.info(\"Attempting to load a remote image without a configured proxy. URL: \" + src);\n } else {\n if (Caman.isURLRemote(Caman.remoteProxy)) {\n Log.info(\"Cannot use a remote proxy for loading images.\");\n return;\n }\n return this.proxyUrl(src);\n }\n }\n };\n\n IO.proxyUrl = function(src) {\n return \"\" + Caman.remoteProxy + \"?\" + Caman.proxyParam + \"=\" + (encodeURIComponent(src));\n };\n\n IO.useProxy = function(lang) {\n var langToExt;\n\n langToExt = {\n ruby: 'rb',\n python: 'py',\n perl: 'pl',\n javascript: 'js'\n };\n lang = lang.toLowerCase();\n if (langToExt[lang] != null) {\n lang = langToExt[lang];\n }\n return \"proxies/caman_proxy.\" + lang;\n };\n\n return IO;\n\n })();\n\n Caman.prototype.save = function() {\n if (typeof exports !== \"undefined\" && exports !== null) {\n return this.nodeSave.apply(this, arguments);\n } else {\n return this.browserSave.apply(this, arguments);\n }\n };\n\n Caman.prototype.browserSave = function(type) {\n var image;\n\n if (type == null) {\n type = \"png\";\n }\n type = type.toLowerCase();\n image = this.toBase64(type).replace(\"image/\" + type, \"image/octet-stream\");\n return document.location.href = image;\n };\n\n Caman.prototype.nodeSave = function(file, overwrite) {\n var e, stats;\n\n if (overwrite == null) {\n overwrite = true;\n }\n try {\n stats = fs.statSync(file);\n if (stats.isFile() && !overwrite) {\n return false;\n }\n } catch (_error) {\n e = _error;\n Log.debug(\"Creating output file \" + file);\n }\n return fs.writeFile(file, this.canvas.toBuffer(), function() {\n return Log.debug(\"Finished writing to \" + file);\n });\n };\n\n Caman.prototype.toImage = function(type) {\n var img;\n\n img = document.createElement('img');\n img.src = this.toBase64(type);\n img.width = this.dimensions.width;\n img.height = this.dimensions.height;\n if (window.devicePixelRatio) {\n img.width /= window.devicePixelRatio;\n img.height /= window.devicePixelRatio;\n }\n return img;\n };\n\n Caman.prototype.toBase64 = function(type) {\n if (type == null) {\n type = \"png\";\n }\n type = type.toLowerCase();\n return this.canvas.toDataURL(\"image/\" + type);\n };\n\n IO = Caman.IO;\n\n Caman.Layer = (function() {\n function Layer(c) {\n this.c = c;\n this.filter = this.c;\n this.options = {\n blendingMode: 'normal',\n opacity: 1.0\n };\n this.layerID = Util.uniqid.get();\n this.canvas = typeof exports !== \"undefined\" && exports !== null ? new Canvas() : document.createElement('canvas');\n this.canvas.width = this.c.dimensions.width;\n this.canvas.height = this.c.dimensions.height;\n this.context = this.canvas.getContext('2d');\n this.context.createImageData(this.canvas.width, this.canvas.height);\n this.imageData = this.context.getImageData(0, 0, this.canvas.width, this.canvas.height);\n this.pixelData = this.imageData.data;\n }\n\n Layer.prototype.newLayer = function(cb) {\n return this.c.newLayer.call(this.c, cb);\n };\n\n Layer.prototype.setBlendingMode = function(mode) {\n this.options.blendingMode = mode;\n return this;\n };\n\n Layer.prototype.opacity = function(opacity) {\n this.options.opacity = opacity / 100;\n return this;\n };\n\n Layer.prototype.copyParent = function() {\n var i, parentData, _i, _ref;\n\n parentData = this.c.pixelData;\n for (i = _i = 0, _ref = this.c.pixelData.length; _i < _ref; i = _i += 4) {\n this.pixelData[i] = parentData[i];\n this.pixelData[i + 1] = parentData[i + 1];\n this.pixelData[i + 2] = parentData[i + 2];\n this.pixelData[i + 3] = parentData[i + 3];\n }\n return this;\n };\n\n Layer.prototype.fillColor = function() {\n return this.c.fillColor.apply(this.c, arguments);\n };\n\n Layer.prototype.overlayImage = function(image) {\n if (typeof image === \"object\") {\n image = image.src;\n } else if (typeof image === \"string\" && image[0] === \"#\") {\n image = $(image).src;\n }\n if (!image) {\n return this;\n }\n this.c.renderer.renderQueue.push({\n type: Filter.Type.LoadOverlay,\n src: image,\n layer: this\n });\n return this;\n };\n\n Layer.prototype.applyToParent = function() {\n var i, layerData, parentData, result, rgbaLayer, rgbaParent, _i, _ref, _results;\n\n parentData = this.c.pixelStack[this.c.pixelStack.length - 1];\n layerData = this.c.pixelData;\n _results = [];\n for (i = _i = 0, _ref = layerData.length; _i < _ref; i = _i += 4) {\n rgbaParent = {\n r: parentData[i],\n g: parentData[i + 1],\n b: parentData[i + 2],\n a: parentData[i + 3]\n };\n rgbaLayer = {\n r: layerData[i],\n g: layerData[i + 1],\n b: layerData[i + 2],\n a: layerData[i + 3]\n };\n result = Blender.execute(this.options.blendingMode, rgbaLayer, rgbaParent);\n result.r = Util.clampRGB(result.r);\n result.g = Util.clampRGB(result.g);\n result.b = Util.clampRGB(result.b);\n if (result.a == null) {\n result.a = rgbaLayer.a;\n }\n parentData[i] = rgbaParent.r - ((rgbaParent.r - result.r) * (this.options.opacity * (result.a / 255)));\n parentData[i + 1] = rgbaParent.g - ((rgbaParent.g - result.g) * (this.options.opacity * (result.a / 255)));\n _results.push(parentData[i + 2] = rgbaParent.b - ((rgbaParent.b - result.b) * (this.options.opacity * (result.a / 255))));\n }\n return _results;\n };\n\n return Layer;\n\n })();\n\n Layer = Caman.Layer;\n\n Caman.Logger = (function() {\n function Logger() {\n var name, _i, _len, _ref;\n\n _ref = ['log', 'info', 'warn', 'error'];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n name = _ref[_i];\n this[name] = (function(name) {\n return function() {\n var args, e;\n\n args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n if (!Caman.DEBUG) {\n return;\n }\n try {\n return console[name].apply(console, args);\n } catch (_error) {\n e = _error;\n return console[name](args);\n }\n };\n })(name);\n }\n this.debug = this.log;\n }\n\n return Logger;\n\n })();\n\n Log = new Caman.Logger();\n\n Caman.Pixel = (function() {\n Pixel.coordinatesToLocation = function(x, y, width) {\n return (y * width + x) * 4;\n };\n\n Pixel.locationToCoordinates = function(loc, width) {\n var x, y;\n\n y = Math.floor(loc / (width * 4));\n x = (loc % (width * 4)) / 4;\n return {\n x: x,\n y: y\n };\n };\n\n function Pixel(r, g, b, a, c) {\n this.r = r != null ? r : 0;\n this.g = g != null ? g : 0;\n this.b = b != null ? b : 0;\n this.a = a != null ? a : 255;\n this.c = c != null ? c : null;\n this.loc = 0;\n }\n\n Pixel.prototype.setContext = function(c) {\n return this.c = c;\n };\n\n Pixel.prototype.locationXY = function() {\n var x, y;\n\n if (this.c == null) {\n throw \"Requires a CamanJS context\";\n }\n y = this.c.dimensions.height - Math.floor(this.loc / (this.c.dimensions.width * 4));\n x = (this.loc % (this.c.dimensions.width * 4)) / 4;\n return {\n x: x,\n y: y\n };\n };\n\n Pixel.prototype.pixelAtLocation = function(loc) {\n if (this.c == null) {\n throw \"Requires a CamanJS context\";\n }\n return new Pixel(this.c.pixelData[loc], this.c.pixelData[loc + 1], this.c.pixelData[loc + 2], this.c.pixelData[loc + 3], this.c);\n };\n\n Pixel.prototype.getPixelRelative = function(horiz, vert) {\n var newLoc;\n\n if (this.c == null) {\n throw \"Requires a CamanJS context\";\n }\n newLoc = this.loc + (this.c.dimensions.width * 4 * (vert * -1)) + (4 * horiz);\n if (newLoc > this.c.pixelData.length || newLoc < 0) {\n return new Pixel(0, 0, 0, 255, this.c);\n }\n return this.pixelAtLocation(newLoc);\n };\n\n Pixel.prototype.putPixelRelative = function(horiz, vert, rgba) {\n var nowLoc;\n\n if (this.c == null) {\n throw \"Requires a CamanJS context\";\n }\n nowLoc = this.loc + (this.c.dimensions.width * 4 * (vert * -1)) + (4 * horiz);\n if (newLoc > this.c.pixelData.length || newLoc < 0) {\n return;\n }\n this.c.pixelData[newLoc] = rgba.r;\n this.c.pixelData[newLoc + 1] = rgba.g;\n this.c.pixelData[newLoc + 2] = rgba.b;\n this.c.pixelData[newLoc + 3] = rgba.a;\n return true;\n };\n\n Pixel.prototype.getPixel = function(x, y) {\n var loc;\n\n if (this.c == null) {\n throw \"Requires a CamanJS context\";\n }\n loc = this.coordinatesToLocation(x, y, this.width);\n return this.pixelAtLocation(loc);\n };\n\n Pixel.prototype.putPixel = function(x, y, rgba) {\n var loc;\n\n if (this.c == null) {\n throw \"Requires a CamanJS context\";\n }\n loc = this.coordinatesToLocation(x, y, this.width);\n this.c.pixelData[loc] = rgba.r;\n this.c.pixelData[loc + 1] = rgba.g;\n this.c.pixelData[loc + 2] = rgba.b;\n return this.c.pixelData[loc + 3] = rgba.a;\n };\n\n Pixel.prototype.toString = function() {\n return this.toKey();\n };\n\n Pixel.prototype.toHex = function(includeAlpha) {\n var hex;\n\n if (includeAlpha == null) {\n includeAlpha = false;\n }\n hex = '#' + this.r.toString(16) + this.g.toString(16) + this.b.toString(16);\n if (includeAlpha) {\n return hex + this.a.toString(16);\n } else {\n return hex;\n }\n };\n\n return Pixel;\n\n })();\n\n Pixel = Caman.Pixel;\n\n Caman.Plugin = (function() {\n function Plugin() {}\n\n Plugin.plugins = {};\n\n Plugin.register = function(name, plugin) {\n return this.plugins[name] = plugin;\n };\n\n Plugin.execute = function(context, name, args) {\n return this.plugins[name].apply(context, args);\n };\n\n return Plugin;\n\n })();\n\n Plugin = Caman.Plugin;\n\n Caman.Renderer = (function() {\n Renderer.Blocks = Caman.NodeJS ? require('os').cpus().length : 4;\n\n function Renderer(c) {\n this.c = c;\n this.processNext = __bind(this.processNext, this);\n this.renderQueue = [];\n this.modPixelData = null;\n }\n\n Renderer.prototype.add = function(job) {\n if (job == null) {\n return;\n }\n return this.renderQueue.push(job);\n };\n\n Renderer.prototype.processNext = function() {\n var layer;\n\n if (this.renderQueue.length === 0) {\n Event.trigger(this, \"renderFinished\");\n if (this.finishedFn != null) {\n this.finishedFn.call(this.c);\n }\n return this;\n }\n this.currentJob = this.renderQueue.shift();\n switch (this.currentJob.type) {\n case Filter.Type.LayerDequeue:\n layer = this.c.canvasQueue.shift();\n this.c.executeLayer(layer);\n return this.processNext();\n case Filter.Type.LayerFinished:\n this.c.applyCurrentLayer();\n this.c.popContext();\n return this.processNext();\n case Filter.Type.LoadOverlay:\n return this.loadOverlay(this.currentJob.layer, this.currentJob.src);\n case Filter.Type.Plugin:\n return this.executePlugin();\n default:\n return this.executeFilter();\n }\n };\n\n Renderer.prototype.execute = function(callback) {\n this.finishedFn = callback;\n this.modPixelData = Util.dataArray(this.c.pixelData.length);\n return this.processNext();\n };\n\n Renderer.prototype.eachBlock = function(fn) {\n var blockN, blockPixelLength, bnum, end, f, i, lastBlockN, n, start, _i, _ref, _results,\n _this = this;\n\n this.blocksDone = 0;\n n = this.c.pixelData.length;\n blockPixelLength = Math.floor((n / 4) / Renderer.Blocks);\n blockN = blockPixelLength * 4;\n lastBlockN = blockN + ((n / 4) % Renderer.Blocks) * 4;\n _results = [];\n for (i = _i = 0, _ref = Renderer.Blocks; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n start = i * blockN;\n end = start + (i === Renderer.Blocks - 1 ? lastBlockN : blockN);\n if (Caman.NodeJS) {\n f = Fiber(function() {\n return fn.call(_this, i, start, end);\n });\n bnum = f.run();\n _results.push(this.blockFinished(bnum));\n } else {\n _results.push(setTimeout((function(i, start, end) {\n return function() {\n return fn.call(_this, i, start, end);\n };\n })(i, start, end), 0));\n }\n }\n return _results;\n };\n\n Renderer.prototype.executeFilter = function() {\n Event.trigger(this.c, \"processStart\", this.currentJob);\n if (this.currentJob.type === Filter.Type.Single) {\n return this.eachBlock(this.renderBlock);\n } else {\n return this.eachBlock(this.renderKernel);\n }\n };\n\n Renderer.prototype.executePlugin = function() {\n Log.debug(\"Executing plugin \" + this.currentJob.plugin);\n Plugin.execute(this.c, this.currentJob.plugin, this.currentJob.args);\n Log.debug(\"Plugin \" + this.currentJob.plugin + \" finished!\");\n return this.processNext();\n };\n\n Renderer.prototype.renderBlock = function(bnum, start, end) {\n var i, pixel, _i;\n\n Log.debug(\"Block #\" + bnum + \" - Filter: \" + this.currentJob.name + \", Start: \" + start + \", End: \" + end);\n Event.trigger(this.c, \"blockStarted\", {\n blockNum: bnum,\n totalBlocks: Renderer.Blocks,\n startPixel: start,\n endPixel: end\n });\n pixel = new Pixel();\n pixel.setContext(this.c);\n for (i = _i = start; _i < end; i = _i += 4) {\n pixel.loc = i;\n pixel.r = this.c.pixelData[i];\n pixel.g = this.c.pixelData[i + 1];\n pixel.b = this.c.pixelData[i + 2];\n pixel.a = this.c.pixelData[i + 3];\n this.currentJob.processFn(pixel);\n this.c.pixelData[i] = Util.clampRGB(pixel.r);\n this.c.pixelData[i + 1] = Util.clampRGB(pixel.g);\n this.c.pixelData[i + 2] = Util.clampRGB(pixel.b);\n this.c.pixelData[i + 3] = Util.clampRGB(pixel.a);\n }\n if (Caman.NodeJS) {\n return Fiber[\"yield\"](bnum);\n } else {\n return this.blockFinished(bnum);\n }\n };\n\n Renderer.prototype.renderKernel = function(bnum, start, end) {\n var adjust, adjustSize, bias, builder, builderIndex, divisor, i, j, k, kernel, n, name, p, pixel, res, _i, _j, _k;\n\n name = this.currentJob.name;\n bias = this.currentJob.bias;\n divisor = this.currentJob.divisor;\n n = this.c.pixelData.length;\n adjust = this.currentJob.adjust;\n adjustSize = Math.sqrt(adjust.length);\n kernel = [];\n Log.debug(\"Rendering kernel - Filter: \" + this.currentJob.name);\n start = Math.max(start, this.c.dimensions.width * 4 * ((adjustSize - 1) / 2));\n end = Math.min(end, n - (this.c.dimensions.width * 4 * ((adjustSize - 1) / 2)));\n builder = (adjustSize - 1) / 2;\n pixel = new Pixel();\n pixel.setContext(this.c);\n for (i = _i = start; _i < end; i = _i += 4) {\n pixel.loc = i;\n builderIndex = 0;\n for (j = _j = -builder; -builder <= builder ? _j <= builder : _j >= builder; j = -builder <= builder ? ++_j : --_j) {\n for (k = _k = builder; builder <= -builder ? _k <= -builder : _k >= -builder; k = builder <= -builder ? ++_k : --_k) {\n p = pixel.getPixelRelative(j, k);\n kernel[builderIndex * 3] = p.r;\n kernel[builderIndex * 3 + 1] = p.g;\n kernel[builderIndex * 3 + 2] = p.b;\n builderIndex++;\n }\n }\n res = this.processKernel(adjust, kernel, divisor, bias);\n this.modPixelData[i] = Util.clampRGB(res.r);\n this.modPixelData[i + 1] = Util.clampRGB(res.g);\n this.modPixelData[i + 2] = Util.clampRGB(res.b);\n this.modPixelData[i + 3] = this.c.pixelData[i + 3];\n }\n if (Caman.NodeJS) {\n return Fiber[\"yield\"](bnum);\n } else {\n return this.blockFinished(bnum);\n }\n };\n\n Renderer.prototype.blockFinished = function(bnum) {\n var i, _i, _ref;\n\n if (bnum >= 0) {\n Log.debug(\"Block #\" + bnum + \" finished! Filter: \" + this.currentJob.name);\n }\n this.blocksDone++;\n Event.trigger(this.c, \"blockFinished\", {\n blockNum: bnum,\n blocksFinished: this.blocksDone,\n totalBlocks: Renderer.Blocks\n });\n if (this.blocksDone === Renderer.Blocks) {\n if (this.currentJob.type === Filter.Type.Kernel) {\n for (i = _i = 0, _ref = this.c.pixelData.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n this.c.pixelData[i] = this.modPixelData[i];\n }\n }\n if (bnum >= 0) {\n Log.debug(\"Filter \" + this.currentJob.name + \" finished!\");\n }\n Event.trigger(this.c, \"processComplete\", this.currentJob);\n return this.processNext();\n }\n };\n\n Renderer.prototype.processKernel = function(adjust, kernel, divisor, bias) {\n var i, val, _i, _ref;\n\n val = {\n r: 0,\n g: 0,\n b: 0\n };\n for (i = _i = 0, _ref = adjust.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n val.r += adjust[i] * kernel[i * 3];\n val.g += adjust[i] * kernel[i * 3 + 1];\n val.b += adjust[i] * kernel[i * 3 + 2];\n }\n val.r = (val.r / divisor) + bias;\n val.g = (val.g / divisor) + bias;\n val.b = (val.b / divisor) + bias;\n return val;\n };\n\n Renderer.prototype.loadOverlay = function(layer, src) {\n var img, proxyUrl,\n _this = this;\n\n img = document.createElement('img');\n img.onload = function() {\n layer.context.drawImage(img, 0, 0, _this.c.dimensions.width, _this.c.dimensions.height);\n layer.imageData = layer.context.getImageData(0, 0, _this.c.dimensions.width, _this.c.dimensions.height);\n layer.pixelData = layer.imageData.data;\n _this.c.pixelData = layer.pixelData;\n return _this.processNext();\n };\n proxyUrl = IO.remoteCheck(src);\n return img.src = proxyUrl != null ? proxyUrl : src;\n };\n\n return Renderer;\n\n })();\n\n Renderer = Caman.Renderer;\n\n Caman.Store = (function() {\n function Store() {}\n\n Store.items = {};\n\n Store.has = function(search) {\n return this.items[search] != null;\n };\n\n Store.get = function(search) {\n return this.items[search];\n };\n\n Store.put = function(name, obj) {\n return this.items[name] = obj;\n };\n\n Store.execute = function(search, callback) {\n var _this = this;\n\n setTimeout(function() {\n return callback.call(_this.get(search), _this.get(search));\n }, 0);\n return this.get(search);\n };\n\n Store.flush = function(name) {\n if (name == null) {\n name = false;\n }\n if (name) {\n return delete this.items[name];\n } else {\n return this.items = {};\n }\n };\n\n return Store;\n\n })();\n\n Store = Caman.Store;\n\n Blender.register(\"normal\", function(rgbaLayer, rgbaParent) {\n return {\n r: rgbaLayer.r,\n g: rgbaLayer.g,\n b: rgbaLayer.b\n };\n });\n\n Blender.register(\"multiply\", function(rgbaLayer, rgbaParent) {\n return {\n r: (rgbaLayer.r * rgbaParent.r) / 255,\n g: (rgbaLayer.g * rgbaParent.g) / 255,\n b: (rgbaLayer.b * rgbaParent.b) / 255\n };\n });\n\n Blender.register(\"screen\", function(rgbaLayer, rgbaParent) {\n return {\n r: 255 - (((255 - rgbaLayer.r) * (255 - rgbaParent.r)) / 255),\n g: 255 - (((255 - rgbaLayer.g) * (255 - rgbaParent.g)) / 255),\n b: 255 - (((255 - rgbaLayer.b) * (255 - rgbaParent.b)) / 255)\n };\n });\n\n Blender.register(\"overlay\", function(rgbaLayer, rgbaParent) {\n var result;\n\n result = {};\n result.r = rgbaParent.r > 128 ? 255 - 2 * (255 - rgbaLayer.r) * (255 - rgbaParent.r) / 255 : (rgbaParent.r * rgbaLayer.r * 2) / 255;\n result.g = rgbaParent.g > 128 ? 255 - 2 * (255 - rgbaLayer.g) * (255 - rgbaParent.g) / 255 : (rgbaParent.g * rgbaLayer.g * 2) / 255;\n result.b = rgbaParent.b > 128 ? 255 - 2 * (255 - rgbaLayer.b) * (255 - rgbaParent.b) / 255 : (rgbaParent.b * rgbaLayer.b * 2) / 255;\n return result;\n });\n\n Blender.register(\"difference\", function(rgbaLayer, rgbaParent) {\n return {\n r: rgbaLayer.r - rgbaParent.r,\n g: rgbaLayer.g - rgbaParent.g,\n b: rgbaLayer.b - rgbaParent.b\n };\n });\n\n Blender.register(\"addition\", function(rgbaLayer, rgbaParent) {\n return {\n r: rgbaParent.r + rgbaLayer.r,\n g: rgbaParent.g + rgbaLayer.g,\n b: rgbaParent.b + rgbaLayer.b\n };\n });\n\n Blender.register(\"exclusion\", function(rgbaLayer, rgbaParent) {\n return {\n r: 128 - 2 * (rgbaParent.r - 128) * (rgbaLayer.r - 128) / 255,\n g: 128 - 2 * (rgbaParent.g - 128) * (rgbaLayer.g - 128) / 255,\n b: 128 - 2 * (rgbaParent.b - 128) * (rgbaLayer.b - 128) / 255\n };\n });\n\n Blender.register(\"softLight\", function(rgbaLayer, rgbaParent) {\n var result;\n\n result = {};\n result.r = rgbaParent.r > 128 ? 255 - ((255 - rgbaParent.r) * (255 - (rgbaLayer.r - 128))) / 255 : (rgbaParent.r * (rgbaLayer.r + 128)) / 255;\n result.g = rgbaParent.g > 128 ? 255 - ((255 - rgbaParent.g) * (255 - (rgbaLayer.g - 128))) / 255 : (rgbaParent.g * (rgbaLayer.g + 128)) / 255;\n result.b = rgbaParent.b > 128 ? 255 - ((255 - rgbaParent.b) * (255 - (rgbaLayer.b - 128))) / 255 : (rgbaParent.b * (rgbaLayer.b + 128)) / 255;\n return result;\n });\n\n Blender.register(\"lighten\", function(rgbaLayer, rgbaParent) {\n return {\n r: rgbaParent.r > rgbaLayer.r ? rgbaParent.r : rgbaLayer.r,\n g: rgbaParent.g > rgbaLayer.g ? rgbaParent.g : rgbaLayer.g,\n b: rgbaParent.b > rgbaLayer.b ? rgbaParent.b : rgbaLayer.b\n };\n });\n\n Blender.register(\"darken\", function(rgbaLayer, rgbaParent) {\n return {\n r: rgbaParent.r > rgbaLayer.r ? rgbaLayer.r : rgbaParent.r,\n g: rgbaParent.g > rgbaLayer.g ? rgbaLayer.g : rgbaParent.g,\n b: rgbaParent.b > rgbaLayer.b ? rgbaLayer.b : rgbaParent.b\n };\n });\n\n Filter.register(\"fillColor\", function() {\n var color;\n\n if (arguments.length === 1) {\n color = Convert.hexToRGB(arguments[0]);\n } else {\n color = {\n r: arguments[0],\n g: arguments[1],\n b: arguments[2]\n };\n }\n return this.process(\"fillColor\", function(rgba) {\n rgba.r = color.r;\n rgba.g = color.g;\n rgba.b = color.b;\n rgba.a = 255;\n return rgba;\n });\n });\n\n Filter.register(\"brightness\", function(adjust) {\n adjust = Math.floor(255 * (adjust / 100));\n return this.process(\"brightness\", function(rgba) {\n rgba.r += adjust;\n rgba.g += adjust;\n rgba.b += adjust;\n return rgba;\n });\n });\n\n Filter.register(\"saturation\", function(adjust) {\n adjust *= -0.01;\n return this.process(\"saturation\", function(rgba) {\n var max;\n\n max = Math.max(rgba.r, rgba.g, rgba.b);\n if (rgba.r !== max) {\n rgba.r += (max - rgba.r) * adjust;\n }\n if (rgba.g !== max) {\n rgba.g += (max - rgba.g) * adjust;\n }\n if (rgba.b !== max) {\n rgba.b += (max - rgba.b) * adjust;\n }\n return rgba;\n });\n });\n\n Filter.register(\"vibrance\", function(adjust) {\n adjust *= -1;\n return this.process(\"vibrance\", function(rgba) {\n var amt, avg, max;\n\n max = Math.max(rgba.r, rgba.g, rgba.b);\n avg = (rgba.r + rgba.g + rgba.b) / 3;\n amt = ((Math.abs(max - avg) * 2 / 255) * adjust) / 100;\n if (rgba.r !== max) {\n rgba.r += (max - rgba.r) * amt;\n }\n if (rgba.g !== max) {\n rgba.g += (max - rgba.g) * amt;\n }\n if (rgba.b !== max) {\n rgba.b += (max - rgba.b) * amt;\n }\n return rgba;\n });\n });\n\n Filter.register(\"greyscale\", function(adjust) {\n return this.process(\"greyscale\", function(rgba) {\n var avg;\n\n avg = Calculate.luminance(rgba);\n rgba.r = avg;\n rgba.g = avg;\n rgba.b = avg;\n return rgba;\n });\n });\n\n Filter.register(\"contrast\", function(adjust) {\n adjust = Math.pow((adjust + 100) / 100, 2);\n return this.process(\"contrast\", function(rgba) {\n rgba.r /= 255;\n rgba.r -= 0.5;\n rgba.r *= adjust;\n rgba.r += 0.5;\n rgba.r *= 255;\n rgba.g /= 255;\n rgba.g -= 0.5;\n rgba.g *= adjust;\n rgba.g += 0.5;\n rgba.g *= 255;\n rgba.b /= 255;\n rgba.b -= 0.5;\n rgba.b *= adjust;\n rgba.b += 0.5;\n rgba.b *= 255;\n return rgba;\n });\n });\n\n Filter.register(\"hue\", function(adjust) {\n return this.process(\"hue\", function(rgba) {\n var b, g, h, hsv, r, _ref;\n\n hsv = Convert.rgbToHSV(rgba.r, rgba.g, rgba.b);\n h = hsv.h * 100;\n h += Math.abs(adjust);\n h = h % 100;\n h /= 100;\n hsv.h = h;\n _ref = Convert.hsvToRGB(hsv.h, hsv.s, hsv.v), r = _ref.r, g = _ref.g, b = _ref.b;\n rgba.r = r;\n rgba.g = g;\n rgba.b = b;\n return rgba;\n });\n });\n\n Filter.register(\"colorize\", function() {\n var level, rgb;\n\n if (arguments.length === 2) {\n rgb = Convert.hexToRGB(arguments[0]);\n level = arguments[1];\n } else if (arguments.length === 4) {\n rgb = {\n r: arguments[0],\n g: arguments[1],\n b: arguments[2]\n };\n level = arguments[3];\n }\n return this.process(\"colorize\", function(rgba) {\n rgba.r -= (rgba.r - rgb.r) * (level / 100);\n rgba.g -= (rgba.g - rgb.g) * (level / 100);\n rgba.b -= (rgba.b - rgb.b) * (level / 100);\n return rgba;\n });\n });\n\n Filter.register(\"invert\", function() {\n return this.process(\"invert\", function(rgba) {\n rgba.r = 255 - rgba.r;\n rgba.g = 255 - rgba.g;\n rgba.b = 255 - rgba.b;\n return rgba;\n });\n });\n\n Filter.register(\"sepia\", function(adjust) {\n if (adjust == null) {\n adjust = 100;\n }\n adjust /= 100;\n return this.process(\"sepia\", function(rgba) {\n rgba.r = Math.min(255, (rgba.r * (1 - (0.607 * adjust))) + (rgba.g * (0.769 * adjust)) + (rgba.b * (0.189 * adjust)));\n rgba.g = Math.min(255, (rgba.r * (0.349 * adjust)) + (rgba.g * (1 - (0.314 * adjust))) + (rgba.b * (0.168 * adjust)));\n rgba.b = Math.min(255, (rgba.r * (0.272 * adjust)) + (rgba.g * (0.534 * adjust)) + (rgba.b * (1 - (0.869 * adjust))));\n return rgba;\n });\n });\n\n Filter.register(\"gamma\", function(adjust) {\n return this.process(\"gamma\", function(rgba) {\n rgba.r = Math.pow(rgba.r / 255, adjust) * 255;\n rgba.g = Math.pow(rgba.g / 255, adjust) * 255;\n rgba.b = Math.pow(rgba.b / 255, adjust) * 255;\n return rgba;\n });\n });\n\n Filter.register(\"noise\", function(adjust) {\n adjust = Math.abs(adjust) * 2.55;\n return this.process(\"noise\", function(rgba) {\n var rand;\n\n rand = Calculate.randomRange(adjust * -1, adjust);\n rgba.r += rand;\n rgba.g += rand;\n rgba.b += rand;\n return rgba;\n });\n });\n\n Filter.register(\"clip\", function(adjust) {\n adjust = Math.abs(adjust) * 2.55;\n return this.process(\"clip\", function(rgba) {\n if (rgba.r > 255 - adjust) {\n rgba.r = 255;\n } else if (rgba.r < adjust) {\n rgba.r = 0;\n }\n if (rgba.g > 255 - adjust) {\n rgba.g = 255;\n } else if (rgba.g < adjust) {\n rgba.g = 0;\n }\n if (rgba.b > 255 - adjust) {\n rgba.b = 255;\n } else if (rgba.b < adjust) {\n rgba.b = 0;\n }\n return rgba;\n });\n });\n\n Filter.register(\"channels\", function(options) {\n var chan, value;\n\n if (typeof options !== \"object\") {\n return this;\n }\n for (chan in options) {\n if (!__hasProp.call(options, chan)) continue;\n value = options[chan];\n if (value === 0) {\n delete options[chan];\n continue;\n }\n options[chan] /= 100;\n }\n if (options.length === 0) {\n return this;\n }\n return this.process(\"channels\", function(rgba) {\n if (options.red != null) {\n if (options.red > 0) {\n rgba.r += (255 - rgba.r) * options.red;\n } else {\n rgba.r -= rgba.r * Math.abs(options.red);\n }\n }\n if (options.green != null) {\n if (options.green > 0) {\n rgba.g += (255 - rgba.g) * options.green;\n } else {\n rgba.g -= rgba.g * Math.abs(options.green);\n }\n }\n if (options.blue != null) {\n if (options.blue > 0) {\n rgba.b += (255 - rgba.b) * options.blue;\n } else {\n rgba.b -= rgba.b * Math.abs(options.blue);\n }\n }\n return rgba;\n });\n });\n\n Filter.register(\"curves\", function() {\n var bezier, chans, cps, ctrl1, ctrl2, end, i, start, _i, _j, _ref, _ref1;\n\n chans = arguments[0], cps = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n if (typeof chans === \"string\") {\n chans = chans.split(\"\");\n }\n if (chans[0] === \"v\") {\n chans = ['r', 'g', 'b'];\n }\n if (cps.length < 3 || cps.length > 4) {\n throw \"Invalid number of arguments to curves filter\";\n }\n start = cps[0];\n ctrl1 = cps[1];\n ctrl2 = cps.length === 4 ? cps[2] : cps[1];\n end = cps[cps.length - 1];\n bezier = Calculate.bezier(start, ctrl1, ctrl2, end, 0, 255);\n if (start[0] > 0) {\n for (i = _i = 0, _ref = start[0]; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n bezier[i] = start[1];\n }\n }\n if (end[0] < 255) {\n for (i = _j = _ref1 = end[0]; _ref1 <= 255 ? _j <= 255 : _j >= 255; i = _ref1 <= 255 ? ++_j : --_j) {\n bezier[i] = end[1];\n }\n }\n return this.process(\"curves\", function(rgba) {\n var _k, _ref2;\n\n for (i = _k = 0, _ref2 = chans.length; 0 <= _ref2 ? _k < _ref2 : _k > _ref2; i = 0 <= _ref2 ? ++_k : --_k) {\n rgba[chans[i]] = bezier[rgba[chans[i]]];\n }\n return rgba;\n });\n });\n\n Filter.register(\"exposure\", function(adjust) {\n var ctrl1, ctrl2, p;\n\n p = Math.abs(adjust) / 100;\n ctrl1 = [0, 255 * p];\n ctrl2 = [255 - (255 * p), 255];\n if (adjust < 0) {\n ctrl1 = ctrl1.reverse();\n ctrl2 = ctrl2.reverse();\n }\n return this.curves('rgb', [0, 0], ctrl1, ctrl2, [255, 255]);\n });\n\n Caman.Plugin.register(\"crop\", function(width, height, x, y) {\n var canvas, ctx;\n\n if (x == null) {\n x = 0;\n }\n if (y == null) {\n y = 0;\n }\n if (typeof exports !== \"undefined\" && exports !== null) {\n canvas = new Canvas(width, height);\n } else {\n canvas = document.createElement('canvas');\n Util.copyAttributes(this.canvas, canvas);\n canvas.width = width;\n canvas.height = height;\n }\n ctx = canvas.getContext('2d');\n ctx.drawImage(this.canvas, x, y, width, height, 0, 0, width, height);\n this.cropCoordinates = {\n x: x,\n y: y\n };\n this.cropped = true;\n return this.replaceCanvas(canvas);\n });\n\n Caman.Plugin.register(\"resize\", function(newDims) {\n var canvas, ctx;\n\n if (newDims == null) {\n newDims = null;\n }\n if (newDims === null || ((newDims.width == null) && (newDims.height == null))) {\n Log.error(\"Invalid or missing dimensions given for resize\");\n return;\n }\n if (newDims.width == null) {\n newDims.width = this.canvas.width * newDims.height / this.canvas.height;\n } else if (newDims.height == null) {\n newDims.height = this.canvas.height * newDims.width / this.canvas.width;\n }\n if (typeof exports !== \"undefined\" && exports !== null) {\n canvas = new Canvas(newDims.width, newDims.height);\n } else {\n canvas = document.createElement('canvas');\n Util.copyAttributes(this.canvas, canvas);\n canvas.width = newDims.width;\n canvas.height = newDims.height;\n }\n ctx = canvas.getContext('2d');\n ctx.drawImage(this.canvas, 0, 0, this.canvas.width, this.canvas.height, 0, 0, newDims.width, newDims.height);\n this.resized = true;\n return this.replaceCanvas(canvas);\n });\n\n Caman.Filter.register(\"crop\", function() {\n return this.processPlugin(\"crop\", Array.prototype.slice.call(arguments, 0));\n });\n\n Caman.Filter.register(\"resize\", function() {\n return this.processPlugin(\"resize\", Array.prototype.slice.call(arguments, 0));\n });\n\n Caman.Filter.register(\"boxBlur\", function() {\n return this.processKernel(\"Box Blur\", [1, 1, 1, 1, 1, 1, 1, 1, 1]);\n });\n\n Caman.Filter.register(\"heavyRadialBlur\", function() {\n return this.processKernel(\"Heavy Radial Blur\", [0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0]);\n });\n\n Caman.Filter.register(\"gaussianBlur\", function() {\n return this.processKernel(\"Gaussian Blur\", [1, 4, 6, 4, 1, 4, 16, 24, 16, 4, 6, 24, 36, 24, 6, 4, 16, 24, 16, 4, 1, 4, 6, 4, 1]);\n });\n\n Caman.Filter.register(\"motionBlur\", function(degrees) {\n var kernel;\n\n if (degrees === 0 || degrees === 180) {\n kernel = [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0];\n } else if ((degrees > 0 && degrees < 90) || (degrees > 180 && degrees < 270)) {\n kernel = [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0];\n } else if (degrees === 90 || degrees === 270) {\n kernel = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n } else {\n kernel = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1];\n }\n return this.processKernel(\"Motion Blur\", kernel);\n });\n\n Caman.Filter.register(\"sharpen\", function(amt) {\n if (amt == null) {\n amt = 100;\n }\n amt /= 100;\n return this.processKernel(\"Sharpen\", [0, -amt, 0, -amt, 4 * amt + 1, -amt, 0, -amt, 0]);\n });\n\n vignetteFilters = {\n brightness: function(rgba, amt, opts) {\n rgba.r = rgba.r - (rgba.r * amt * opts.strength);\n rgba.g = rgba.g - (rgba.g * amt * opts.strength);\n rgba.b = rgba.b - (rgba.b * amt * opts.strength);\n return rgba;\n },\n gamma: function(rgba, amt, opts) {\n rgba.r = Math.pow(rgba.r / 255, Math.max(10 * amt * opts.strength, 1)) * 255;\n rgba.g = Math.pow(rgba.g / 255, Math.max(10 * amt * opts.strength, 1)) * 255;\n rgba.b = Math.pow(rgba.b / 255, Math.max(10 * amt * opts.strength, 1)) * 255;\n return rgba;\n },\n colorize: function(rgba, amt, opts) {\n rgba.r -= (rgba.r - opts.color.r) * amt;\n rgba.g -= (rgba.g - opts.color.g) * amt;\n rgba.b -= (rgba.b - opts.color.b) * amt;\n return rgba;\n }\n };\n\n Filter.register(\"vignette\", function(size, strength) {\n var bezier, center, end, start;\n\n if (strength == null) {\n strength = 60;\n }\n if (typeof size === \"string\" && size.substr(-1) === \"%\") {\n if (this.dimensions.height > this.dimensions.width) {\n size = this.dimensions.width * (parseInt(size.substr(0, size.length - 1), 10) / 100);\n } else {\n size = this.dimensions.height * (parseInt(size.substr(0, size.length - 1), 10) / 100);\n }\n }\n strength /= 100;\n center = [this.dimensions.width / 2, this.dimensions.height / 2];\n start = Math.sqrt(Math.pow(center[0], 2) + Math.pow(center[1], 2));\n end = start - size;\n bezier = Calculate.bezier([0, 1], [30, 30], [70, 60], [100, 80]);\n return this.process(\"vignette\", function(rgba) {\n var dist, div, loc;\n\n loc = rgba.locationXY();\n dist = Calculate.distance(loc.x, loc.y, center[0], center[1]);\n if (dist > end) {\n div = Math.max(1, (bezier[Math.round(((dist - end) / size) * 100)] / 10) * strength);\n rgba.r = Math.pow(rgba.r / 255, div) * 255;\n rgba.g = Math.pow(rgba.g / 255, div) * 255;\n rgba.b = Math.pow(rgba.b / 255, div) * 255;\n }\n return rgba;\n });\n });\n\n Filter.register(\"rectangularVignette\", function(opts) {\n var defaults, dim, percent, size, _i, _len, _ref;\n\n defaults = {\n strength: 50,\n cornerRadius: 0,\n method: 'brightness',\n color: {\n r: 0,\n g: 0,\n b: 0\n }\n };\n opts = Util.extend(defaults, opts);\n if (!opts.size) {\n return this;\n } else if (typeof opts.size === \"string\") {\n percent = parseInt(opts.size, 10) / 100;\n opts.size = {\n width: this.dimensions.width * percent,\n height: this.dimensions.height * percent\n };\n } else if (typeof opts.size === \"object\") {\n _ref = [\"width\", \"height\"];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n dim = _ref[_i];\n if (typeof opts.size[dim] === \"string\") {\n opts.size[dim] = this.dimensions[dim] * (parseInt(opts.size[dim], 10) / 100);\n }\n }\n } else if (opts.size === \"number\") {\n size = opts.size;\n opts.size = {\n width: size,\n height: size\n };\n }\n if (typeof opts.cornerRadius === \"string\") {\n opts.cornerRadius = (opts.size.width / 2) * (parseInt(opts.cornerRadius, 10) / 100);\n }\n opts.strength /= 100;\n opts.size.width = Math.floor(opts.size.width);\n opts.size.height = Math.floor(opts.size.height);\n opts.image = {\n width: this.dimensions.width,\n height: this.dimensions.height\n };\n if (opts.method === \"colorize\" && typeof opts.color === \"string\") {\n opts.color = Convert.hexToRGB(opts.color);\n }\n opts.coords = {\n left: (this.dimensions.width - opts.size.width) / 2,\n right: this.dimensions.width - opts.coords.left,\n bottom: (this.dimensions.height - opts.size.height) / 2,\n top: this.dimensions.height - opts.coords.bottom\n };\n opts.corners = [\n {\n x: opts.coords.left + opts.cornerRadius,\n y: opts.coords.top - opts.cornerRadius\n }, {\n x: opts.coords.right - opts.cornerRadius,\n y: opts.coords.top - opts.cornerRadius\n }, {\n x: opts.coords.right - opts.cornerRadius,\n y: opts.coords.bottom + opts.cornerRadius\n }, {\n x: opts.coords.left + opts.cornerRadius,\n y: opts.coords.bottom + opts.cornerRadius\n }\n ];\n opts.maxDist = Calculate.distance(0, 0, opts.corners[3].x, opts.corners[3].y) - opts.cornerRadius;\n return this.process(\"rectangularVignette\", function(rgba) {\n var amt, loc, radialDist;\n\n loc = rgba.locationXY();\n if ((loc.x > opts.corners[0].x && loc.x < opts.corners[1].x) && (loc.y > opts.coords.bottom && loc.y < opts.coords.top)) {\n return rgba;\n }\n if ((loc.x > opts.coords.left && loc.x < opts.coords.right) && (loc.y > opts.corners[3].y && loc.y < opts.corners[2].y)) {\n return rgba;\n }\n if (loc.x > opts.corners[0].x && loc.x < opts.corners[1].x && loc.y > opts.coords.top) {\n amt = (loc.y - opts.coords.top) / opts.maxDist;\n } else if (loc.y > opts.corners[2].y && loc.y < opts.corners[1].y && loc.x > opts.coords.right) {\n amt = (loc.x - opts.coords.right) / opts.maxDist;\n } else if (loc.x > opts.corners[0].x && loc.x < opts.corners[1].x && loc.y < opts.coords.bottom) {\n amt = (opts.coords.bottom - loc.y) / opts.maxDist;\n } else if (loc.y > opts.corners[2].y && loc.y < opts.corners[1].y && loc.x < opts.coords.left) {\n amt = (opts.coords.left - loc.x) / opts.maxDist;\n } else if (loc.x <= opts.corners[0].x && loc.y >= opts.corners[0].y) {\n radialDist = Caman.distance(loc.x, loc.y, opts.corners[0].x, opts.corners[0].y);\n amt = (radialDist - opts.cornerRadius) / opts.maxDist;\n } else if (loc.x >= opts.corners[1].x && loc.y >= opts.corners[1].y) {\n radialDist = Caman.distance(loc.x, loc.y, opts.corners[1].x, opts.corners[1].y);\n amt = (radialDist - opts.cornerRadius) / opts.maxDist;\n } else if (loc.x >= opts.corners[2].x && loc.y <= opts.corners[2].y) {\n radialDist = Caman.distance(loc.x, loc.y, opts.corners[2].x, opts.corners[2].y);\n amt = (radialDist - opts.cornerRadius) / opts.maxDist;\n } else if (loc.x <= opts.corners[3].x && loc.y <= opts.corners[3].y) {\n radialDist = Caman.distance(loc.x, loc.y, opts.corners[3].x, opts.corners[3].y);\n amt = (radialDist - opts.cornerRadius) / opts.maxDist;\n }\n if (amt < 0) {\n return rgba;\n }\n return vignetteFilters[opts.method](rgba, amt, opts);\n });\n });\n\n /*\n CompoundBlur - Blurring with varying radii for Canvas\n \n Version: 0.1\n Author: Mario Klingemann\n Contact: mario@quasimondo.com\n Website: http://www.quasimondo.com/StackBlurForCanvas\n Twitter: @quasimondo\n Modified By: Ryan LeFevre (@meltingice)\n \n In case you find this class useful - especially in commercial projects -\n I am not totally unhappy for a small donation to my PayPal account\n mario@quasimondo.de\n \n Copyright (c) 2011 Mario Klingemann\n \n Permission is hereby granted, free of charge, to any person\n obtaining a copy of this software and associated documentation\n files (the \"Software\"), to deal in the Software without\n restriction, including without limitation the rights to use,\n copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following\n conditions:\n \n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n (function() {\n var BlurStack, getLinearGradientMap, getRadialGradientMap, mul_table, shg_table;\n\n mul_table = [512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456, 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456, 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335, 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328, 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271, 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335, 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259];\n shg_table = [9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24];\n getLinearGradientMap = function(width, height, centerX, centerY, angle, length, mirrored) {\n var cnv, context, gradient, x1, x2, y1, y2;\n\n cnv = typeof exports !== \"undefined\" && exports !== null ? new Canvas() : document.createElement('canvas');\n cnv.width = width;\n cnv.height = height;\n x1 = centerX + Math.cos(angle) * length * 0.5;\n y1 = centerY + Math.sin(angle) * length * 0.5;\n x2 = centerX - Math.cos(angle) * length * 0.5;\n y2 = centerY - Math.sin(angle) * length * 0.5;\n context = cnv.getContext(\"2d\");\n gradient = context.createLinearGradient(x1, y1, x2, y2);\n if (!mirrored) {\n gradient.addColorStop(0, \"white\");\n gradient.addColorStop(1, \"black\");\n } else {\n gradient.addColorStop(0, \"white\");\n gradient.addColorStop(0.5, \"black\");\n gradient.addColorStop(1, \"white\");\n }\n context.fillStyle = gradient;\n context.fillRect(0, 0, width, height);\n return context.getImageData(0, 0, width, height);\n };\n getRadialGradientMap = function(width, height, centerX, centerY, radius1, radius2) {\n var cnv, context, gradient;\n\n cnv = typeof exports !== \"undefined\" && exports !== null ? new Canvas() : document.createElement('canvas');\n cnv.width = width;\n cnv.height = height;\n context = cnv.getContext(\"2d\");\n gradient = context.createRadialGradient(centerX, centerY, radius1, centerX, centerY, radius2);\n gradient.addColorStop(1, \"white\");\n gradient.addColorStop(0, \"black\");\n context.fillStyle = gradient;\n context.fillRect(0, 0, width, height);\n return context.getImageData(0, 0, width, height);\n };\n BlurStack = function() {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n return this.next = null;\n };\n Caman.Plugin.register(\"compoundBlur\", function(radiusData, radius, increaseFactor, blurLevels) {\n var b_in_sum, b_out_sum, b_sum, blend, currentIndex, div, g_in_sum, g_out_sum, g_sum, height, heightMinus1, i, iblend, idx, imagePixels, index, iradius, lookupValue, mul_sum, p, pb, pg, pixels, pr, r_in_sum, r_out_sum, r_sum, radiusPixels, radiusPlus1, rbs, shg_sum, stack, stackEnd, stackIn, stackOut, stackStart, steps, sumFactor, w4, wh, wh4, width, widthMinus1, x, y, yi, yp, yw, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;\n\n width = this.dimensions.width;\n height = this.dimensions.height;\n imagePixels = this.pixelData;\n radiusPixels = radiusData.data;\n wh = width * height;\n wh4 = wh << 2;\n pixels = [];\n for (i = _i = 0; 0 <= wh4 ? _i < wh4 : _i > wh4; i = 0 <= wh4 ? ++_i : --_i) {\n pixels[i] = imagePixels[i];\n }\n currentIndex = 0;\n steps = blurLevels;\n blurLevels -= 1;\n while (steps-- >= 0) {\n iradius = (radius + 0.5) | 0;\n if (iradius === 0) {\n continue;\n }\n if (iradius > 256) {\n iradius = 256;\n }\n div = iradius + iradius + 1;\n w4 = width << 2;\n widthMinus1 = width - 1;\n heightMinus1 = height - 1;\n radiusPlus1 = iradius + 1;\n sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n stackStart = new BlurStack();\n stackEnd = void 0;\n stack = stackStart;\n for (i = _j = 1; 1 <= div ? _j < div : _j > div; i = 1 <= div ? ++_j : --_j) {\n stack = stack.next = new BlurStack();\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n stack.next = stackStart;\n stackIn = null;\n stackOut = null;\n yw = yi = 0;\n mul_sum = mul_table[iradius];\n shg_sum = shg_table[iradius];\n for (y = _k = 0; 0 <= height ? _k < height : _k > height; y = 0 <= height ? ++_k : --_k) {\n r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0;\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n stack = stackStart;\n for (i = _l = 0; 0 <= radiusPlus1 ? _l < radiusPlus1 : _l > radiusPlus1; i = 0 <= radiusPlus1 ? ++_l : --_l) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n for (i = _m = 1; 1 <= radiusPlus1 ? _m < radiusPlus1 : _m > radiusPlus1; i = 1 <= radiusPlus1 ? ++_m : --_m) {\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[p + 1])) * rbs;\n b_sum += (stack.b = (pb = pixels[p + 2])) * rbs;\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n stack = stack.next;\n }\n stackIn = stackStart;\n stackOut = stackEnd;\n for (x = _n = 0; 0 <= width ? _n < width : _n > width; x = 0 <= width ? ++_n : --_n) {\n pixels[yi] = (r_sum * mul_sum) >> shg_sum;\n pixels[yi + 1] = (g_sum * mul_sum) >> shg_sum;\n pixels[yi + 2] = (b_sum * mul_sum) >> shg_sum;\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n p = (yw + ((p = x + radiusPlus1) < widthMinus1 ? p : widthMinus1)) << 2;\n r_in_sum += (stackIn.r = pixels[p]);\n g_in_sum += (stackIn.g = pixels[p + 1]);\n b_in_sum += (stackIn.b = pixels[p + 2]);\n r_sum += r_in_sum;\n g_sum += g_in_sum;\n b_sum += b_in_sum;\n stackIn = stackIn.next;\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n stackOut = stackOut.next;\n yi += 4;\n }\n yw += width;\n }\n for (x = _o = 0; 0 <= width ? _o < width : _o > width; x = 0 <= width ? ++_o : --_o) {\n g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0;\n yi = x << 2;\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n stack = stackStart;\n for (i = _p = 0; 0 <= radiusPlus1 ? _p < radiusPlus1 : _p > radiusPlus1; i = 0 <= radiusPlus1 ? ++_p : --_p) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n yp = width;\n for (i = _q = 1; 1 <= radiusPlus1 ? _q < radiusPlus1 : _q > radiusPlus1; i = 1 <= radiusPlus1 ? ++_q : --_q) {\n yi = (yp + x) << 2;\n r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[yi + 1])) * rbs;\n b_sum += (stack.b = (pb = pixels[yi + 2])) * rbs;\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n stack = stack.next;\n if (i < heightMinus1) {\n yp += width;\n }\n }\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (y = _r = 0; 0 <= height ? _r < height : _r > height; y = 0 <= height ? ++_r : --_r) {\n p = yi << 2;\n pixels[p] = (r_sum * mul_sum) >> shg_sum;\n pixels[p + 1] = (g_sum * mul_sum) >> shg_sum;\n pixels[p + 2] = (b_sum * mul_sum) >> shg_sum;\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;\n r_sum += (r_in_sum += (stackIn.r = pixels[p]));\n g_sum += (g_in_sum += (stackIn.g = pixels[p + 1]));\n b_sum += (b_in_sum += (stackIn.b = pixels[p + 2]));\n stackIn = stackIn.next;\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n stackOut = stackOut.next;\n yi += width;\n }\n }\n radius *= increaseFactor;\n i = wh;\n while (--i > -1) {\n idx = i << 2;\n lookupValue = (radiusPixels[idx + 2] & 0xff) / 255.0 * blurLevels;\n index = lookupValue | 0;\n if (index === currentIndex) {\n blend = 256.0 * (lookupValue - (lookupValue | 0));\n iblend = 256 - blend;\n imagePixels[idx] = (imagePixels[idx] * iblend + pixels[idx] * blend) >> 8;\n imagePixels[idx + 1] = (imagePixels[idx + 1] * iblend + pixels[idx + 1] * blend) >> 8;\n imagePixels[idx + 2] = (imagePixels[idx + 2] * iblend + pixels[idx + 2] * blend) >> 8;\n } else if (index === currentIndex + 1) {\n imagePixels[idx] = pixels[idx];\n imagePixels[idx + 1] = pixels[idx + 1];\n imagePixels[idx + 2] = pixels[idx + 2];\n }\n }\n currentIndex++;\n }\n return this;\n });\n Caman.Filter.register(\"tiltShift\", function(opts) {\n var defaults, gradient;\n\n defaults = {\n center: {\n x: this.dimensions.width / 2,\n y: this.dimensions.height / 2\n },\n angle: 45,\n focusWidth: 200,\n startRadius: 3,\n radiusFactor: 1.5,\n steps: 3\n };\n opts = Util.extend(defaults, opts);\n opts.angle *= Math.PI / 180;\n gradient = getLinearGradientMap(this.dimensions.width, this.dimensions.height, opts.center.x, opts.center.y, opts.angle, opts.focusWidth, true);\n return this.processPlugin(\"compoundBlur\", [gradient, opts.startRadius, opts.radiusFactor, opts.steps]);\n });\n return Caman.Filter.register(\"radialBlur\", function(opts) {\n var defaults, gradient, radius1, radius2;\n\n defaults = {\n size: 50,\n center: {\n x: this.dimensions.width / 2,\n y: this.dimensions.height / 2\n },\n startRadius: 3,\n radiusFactor: 1.5,\n steps: 3,\n radius: null\n };\n opts = Util.extend(defaults, opts);\n if (!opts.radius) {\n opts.radius = this.dimensions.width < this.dimensions.height ? this.dimensions.height : this.dimensions.width;\n }\n radius1 = (opts.radius / 2) - opts.size;\n radius2 = opts.radius / 2;\n gradient = getRadialGradientMap(this.dimensions.width, this.dimensions.height, opts.center.x, opts.center.y, radius1, radius2);\n return this.processPlugin(\"compoundBlur\", [gradient, opts.startRadius, opts.radiusFactor, opts.steps]);\n });\n })();\n\n Caman.Filter.register(\"edgeEnhance\", function() {\n return this.processKernel(\"Edge Enhance\", [0, 0, 0, -1, 1, 0, 0, 0, 0]);\n });\n\n Caman.Filter.register(\"edgeDetect\", function() {\n return this.processKernel(\"Edge Detect\", [-1, -1, -1, -1, 8, -1, -1, -1, -1]);\n });\n\n Caman.Filter.register(\"emboss\", function() {\n return this.processKernel(\"Emboss\", [-2, -1, 0, -1, 1, 1, 0, 1, 2]);\n });\n\n Caman.Filter.register(\"posterize\", function(adjust) {\n var numOfAreas, numOfValues;\n\n numOfAreas = 256 / adjust;\n numOfValues = 255 / (adjust - 1);\n return this.process(\"posterize\", function(rgba) {\n rgba.r = Math.floor(Math.floor(rgba.r / numOfAreas) * numOfValues);\n rgba.g = Math.floor(Math.floor(rgba.g / numOfAreas) * numOfValues);\n rgba.b = Math.floor(Math.floor(rgba.b / numOfAreas) * numOfValues);\n return rgba;\n });\n });\n\n Caman.Filter.register(\"vintage\", function(vignette) {\n if (vignette == null) {\n vignette = true;\n }\n this.greyscale();\n this.contrast(5);\n this.noise(3);\n this.sepia(100);\n this.channels({\n red: 8,\n blue: 2,\n green: 4\n });\n this.gamma(0.87);\n if (vignette) {\n return this.vignette(\"40%\", 30);\n }\n });\n\n Caman.Filter.register(\"lomo\", function(vignette) {\n if (vignette == null) {\n vignette = true;\n }\n this.brightness(15);\n this.exposure(15);\n this.curves('rgb', [0, 0], [200, 0], [155, 255], [255, 255]);\n this.saturation(-20);\n this.gamma(1.8);\n if (vignette) {\n this.vignette(\"50%\", 60);\n }\n return this.brightness(5);\n });\n\n Caman.Filter.register(\"clarity\", function(grey) {\n if (grey == null) {\n grey = false;\n }\n this.vibrance(20);\n this.curves('rgb', [5, 0], [130, 150], [190, 220], [250, 255]);\n this.sharpen(15);\n this.vignette(\"45%\", 20);\n if (grey) {\n this.greyscale();\n this.contrast(4);\n }\n return this;\n });\n\n Caman.Filter.register(\"sinCity\", function() {\n this.contrast(100);\n this.brightness(15);\n this.exposure(10);\n this.posterize(80);\n this.clip(30);\n return this.greyscale();\n });\n\n Caman.Filter.register(\"sunrise\", function() {\n this.exposure(3.5);\n this.saturation(-5);\n this.vibrance(50);\n this.sepia(60);\n this.colorize(\"#e87b22\", 10);\n this.channels({\n red: 8,\n blue: 8\n });\n this.contrast(5);\n this.gamma(1.2);\n return this.vignette(\"55%\", 25);\n });\n\n Caman.Filter.register(\"crossProcess\", function() {\n this.exposure(5);\n this.colorize(\"#e87b22\", 4);\n this.sepia(20);\n this.channels({\n blue: 8,\n red: 3\n });\n this.curves('b', [0, 0], [100, 150], [180, 180], [255, 255]);\n this.contrast(15);\n this.vibrance(75);\n return this.gamma(1.6);\n });\n\n Caman.Filter.register(\"orangePeel\", function() {\n this.curves('rgb', [0, 0], [100, 50], [140, 200], [255, 255]);\n this.vibrance(-30);\n this.saturation(-30);\n this.colorize('#ff9000', 30);\n this.contrast(-5);\n return this.gamma(1.4);\n });\n\n Caman.Filter.register(\"love\", function() {\n this.brightness(5);\n this.exposure(8);\n this.contrast(4);\n this.colorize('#c42007', 30);\n this.vibrance(50);\n return this.gamma(1.3);\n });\n\n Caman.Filter.register(\"grungy\", function() {\n this.gamma(1.5);\n this.clip(25);\n this.saturation(-60);\n this.contrast(5);\n this.noise(5);\n return this.vignette(\"50%\", 30);\n });\n\n Caman.Filter.register(\"jarques\", function() {\n this.saturation(-35);\n this.curves('b', [20, 0], [90, 120], [186, 144], [255, 230]);\n this.curves('r', [0, 0], [144, 90], [138, 120], [255, 255]);\n this.curves('g', [10, 0], [115, 105], [148, 100], [255, 248]);\n this.curves('rgb', [0, 0], [120, 100], [128, 140], [255, 255]);\n return this.sharpen(20);\n });\n\n Caman.Filter.register(\"pinhole\", function() {\n this.greyscale();\n this.sepia(10);\n this.exposure(10);\n this.contrast(15);\n return this.vignette(\"60%\", 35);\n });\n\n Caman.Filter.register(\"oldBoot\", function() {\n this.saturation(-20);\n this.vibrance(-50);\n this.gamma(1.1);\n this.sepia(30);\n this.channels({\n red: -10,\n blue: 5\n });\n this.curves('rgb', [0, 0], [80, 50], [128, 230], [255, 255]);\n return this.vignette(\"60%\", 30);\n });\n\n Caman.Filter.register(\"glowingSun\", function(vignette) {\n if (vignette == null) {\n vignette = true;\n }\n this.brightness(10);\n this.newLayer(function() {\n this.setBlendingMode(\"multiply\");\n this.opacity(80);\n this.copyParent();\n this.filter.gamma(0.8);\n this.filter.contrast(50);\n return this.filter.exposure(10);\n });\n this.newLayer(function() {\n this.setBlendingMode(\"softLight\");\n this.opacity(80);\n return this.fillColor(\"#f49600\");\n });\n this.exposure(20);\n this.gamma(0.8);\n if (vignette) {\n return this.vignette(\"45%\", 20);\n }\n });\n\n Caman.Filter.register(\"hazyDays\", function() {\n this.gamma(1.2);\n this.newLayer(function() {\n this.setBlendingMode(\"overlay\");\n this.opacity(60);\n this.copyParent();\n this.filter.channels({\n red: 5\n });\n return this.filter.stackBlur(15);\n });\n this.newLayer(function() {\n this.setBlendingMode(\"addition\");\n this.opacity(40);\n return this.fillColor(\"#6899ba\");\n });\n this.newLayer(function() {\n this.setBlendingMode(\"multiply\");\n this.opacity(35);\n this.copyParent();\n this.filter.brightness(40);\n this.filter.vibrance(40);\n this.filter.exposure(30);\n this.filter.contrast(15);\n this.filter.curves('r', [0, 40], [128, 128], [128, 128], [255, 215]);\n this.filter.curves('g', [0, 40], [128, 128], [128, 128], [255, 215]);\n this.filter.curves('b', [0, 40], [128, 128], [128, 128], [255, 215]);\n return this.filter.stackBlur(5);\n });\n this.curves('r', [20, 0], [128, 158], [128, 128], [235, 255]);\n this.curves('g', [20, 0], [128, 128], [128, 128], [235, 255]);\n this.curves('b', [20, 0], [128, 108], [128, 128], [235, 255]);\n return this.vignette(\"45%\", 20);\n });\n\n Caman.Filter.register(\"herMajesty\", function() {\n this.brightness(40);\n this.colorize(\"#ea1c5d\", 10);\n this.curves('b', [0, 10], [128, 180], [190, 190], [255, 255]);\n this.newLayer(function() {\n this.setBlendingMode('overlay');\n this.opacity(50);\n this.copyParent();\n this.filter.gamma(0.7);\n return this.newLayer(function() {\n this.setBlendingMode('normal');\n this.opacity(60);\n return this.fillColor('#ea1c5d');\n });\n });\n this.newLayer(function() {\n this.setBlendingMode('multiply');\n this.opacity(60);\n this.copyParent();\n this.filter.saturation(50);\n this.filter.hue(90);\n return this.filter.contrast(10);\n });\n this.gamma(1.4);\n this.vibrance(-30);\n this.newLayer(function() {\n this.opacity(10);\n return this.fillColor('#e5f0ff');\n });\n return this;\n });\n\n Caman.Filter.register(\"nostalgia\", function() {\n this.saturation(20);\n this.gamma(1.4);\n this.greyscale();\n this.contrast(5);\n this.sepia(100);\n this.channels({\n red: 8,\n blue: 2,\n green: 4\n });\n this.gamma(0.8);\n this.contrast(5);\n this.exposure(10);\n this.newLayer(function() {\n this.setBlendingMode('overlay');\n this.copyParent();\n this.opacity(55);\n return this.filter.stackBlur(10);\n });\n return this.vignette(\"50%\", 30);\n });\n\n Caman.Filter.register(\"hemingway\", function() {\n this.greyscale();\n this.contrast(10);\n this.gamma(0.9);\n this.newLayer(function() {\n this.setBlendingMode(\"multiply\");\n this.opacity(40);\n this.copyParent();\n this.filter.exposure(15);\n this.filter.contrast(15);\n return this.filter.channels({\n green: 10,\n red: 5\n });\n });\n this.sepia(30);\n this.curves('rgb', [0, 10], [120, 90], [180, 200], [235, 255]);\n this.channels({\n red: 5,\n green: -2\n });\n return this.exposure(15);\n });\n\n Caman.Filter.register(\"concentrate\", function() {\n this.sharpen(40);\n this.saturation(-50);\n this.channels({\n red: 3\n });\n this.newLayer(function() {\n this.setBlendingMode(\"multiply\");\n this.opacity(80);\n this.copyParent();\n this.filter.sharpen(5);\n this.filter.contrast(50);\n this.filter.exposure(10);\n return this.filter.channels({\n blue: 5\n });\n });\n return this.brightness(10);\n });\n\n Caman.Plugin.register(\"rotate\", function(degrees) {\n var angle, canvas, ctx, height, to_radians, width, x, y;\n\n angle = degrees % 360;\n if (angle === 0) {\n return this.dimensions = {\n width: this.canvas.width,\n height: this.canvas.height\n };\n }\n to_radians = Math.PI / 180;\n if (typeof exports !== \"undefined\" && exports !== null) {\n canvas = new Canvas();\n } else {\n canvas = document.createElement('canvas');\n Util.copyAttributes(this.canvas, canvas);\n }\n if (angle === 90 || angle === -270 || angle === 270 || angle === -90) {\n width = this.canvas.height;\n height = this.canvas.width;\n x = width / 2;\n y = height / 2;\n } else if (angle === 180) {\n width = this.canvas.width;\n height = this.canvas.height;\n x = width / 2;\n y = height / 2;\n } else {\n width = Math.sqrt(Math.pow(this.originalWidth, 2) + Math.pow(this.originalHeight, 2));\n height = width;\n x = this.canvas.height / 2;\n y = this.canvas.width / 2;\n }\n canvas.width = width;\n canvas.height = height;\n ctx = canvas.getContext('2d');\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(angle * to_radians);\n ctx.drawImage(this.canvas, -this.canvas.width / 2, -this.canvas.height / 2, this.canvas.width, this.canvas.height);\n ctx.restore();\n return this.replaceCanvas(canvas);\n });\n\n Caman.Filter.register(\"rotate\", function() {\n return this.processPlugin(\"rotate\", Array.prototype.slice.call(arguments, 0));\n });\n\n /*\n StackBlur - a fast almost Gaussian Blur For Canvas v0.31 modified for CamanJS\n \n Version: 0.31\n Author: Mario Klingemann\n Contact: mario@quasimondo.com\n Website: http://www.quasimondo.com/StackBlurForCanvas\n Twitter: @quasimondo\n Modified By: Ryan LeFevre (@meltingice)\n \n In case you find this class useful - especially in commercial projects -\n I am not totally unhappy for a small donation to my PayPal account\n mario@quasimondo.de\n \n Or support me on flattr: \n https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript\n \n Copyright (c) 2010 Mario Klingemann\n \n Permission is hereby granted, free of charge, to any person\n obtaining a copy of this software and associated documentation\n files (the \"Software\"), to deal in the Software without\n restriction, including without limitation the rights to use,\n copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following\n conditions:\n \n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n (function() {\n var BlurStack, mul_table, shg_table;\n\n mul_table = [512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456, 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456, 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335, 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328, 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271, 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335, 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259];\n shg_table = [9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24];\n BlurStack = function() {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n return this.next = null;\n };\n Caman.Plugin.register(\"stackBlur\", function(radius) {\n var b_in_sum, b_out_sum, b_sum, div, g_in_sum, g_out_sum, g_sum, height, heightMinus1, i, mul_sum, p, pb, pg, pixels, pr, r_in_sum, r_out_sum, r_sum, radiusPlus1, rbs, shg_sum, stack, stackEnd, stackIn, stackOut, stackStart, sumFactor, w4, width, widthMinus1, x, y, yi, yp, yw, _i, _j, _k, _l, _m, _n, _o, _p, _q;\n\n if (isNaN(radius) || radius < 1) {\n return;\n }\n radius |= 0;\n pixels = this.pixelData;\n width = this.dimensions.width;\n height = this.dimensions.height;\n div = radius + radius + 1;\n w4 = width << 2;\n widthMinus1 = width - 1;\n heightMinus1 = height - 1;\n radiusPlus1 = radius + 1;\n sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n stackStart = new BlurStack();\n stack = stackStart;\n for (i = _i = 1; 1 <= div ? _i < div : _i > div; i = 1 <= div ? ++_i : --_i) {\n stack = stack.next = new BlurStack();\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n stack.next = stackStart;\n stackIn = null;\n stackOut = null;\n yw = yi = 0;\n mul_sum = mul_table[radius];\n shg_sum = shg_table[radius];\n for (y = _j = 0; 0 <= height ? _j < height : _j > height; y = 0 <= height ? ++_j : --_j) {\n r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0;\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n stack = stackStart;\n for (i = _k = 0; 0 <= radiusPlus1 ? _k < radiusPlus1 : _k > radiusPlus1; i = 0 <= radiusPlus1 ? ++_k : --_k) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n for (i = _l = 1; 1 <= radiusPlus1 ? _l < radiusPlus1 : _l > radiusPlus1; i = 1 <= radiusPlus1 ? ++_l : --_l) {\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[p + 1])) * rbs;\n b_sum += (stack.b = (pb = pixels[p + 2])) * rbs;\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n stack = stack.next;\n }\n stackIn = stackStart;\n stackOut = stackEnd;\n for (x = _m = 0; 0 <= width ? _m < width : _m > width; x = 0 <= width ? ++_m : --_m) {\n pixels[yi] = (r_sum * mul_sum) >> shg_sum;\n pixels[yi + 1] = (g_sum * mul_sum) >> shg_sum;\n pixels[yi + 2] = (b_sum * mul_sum) >> shg_sum;\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;\n r_in_sum += (stackIn.r = pixels[p]);\n g_in_sum += (stackIn.g = pixels[p + 1]);\n b_in_sum += (stackIn.b = pixels[p + 2]);\n r_sum += r_in_sum;\n g_sum += g_in_sum;\n b_sum += b_in_sum;\n stackIn = stackIn.next;\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n stackOut = stackOut.next;\n yi += 4;\n }\n yw += width;\n }\n for (x = _n = 0; 0 <= width ? _n < width : _n > width; x = 0 <= width ? ++_n : --_n) {\n g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0;\n yi = x << 2;\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n stack = stackStart;\n for (i = _o = 0; 0 <= radiusPlus1 ? _o < radiusPlus1 : _o > radiusPlus1; i = 0 <= radiusPlus1 ? ++_o : --_o) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n yp = width;\n for (i = _p = 1; 1 <= radius ? _p <= radius : _p >= radius; i = 1 <= radius ? ++_p : --_p) {\n yi = (yp + x) << 2;\n r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[yi + 1])) * rbs;\n b_sum += (stack.b = (pb = pixels[yi + 2])) * rbs;\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n stack = stack.next;\n if (i < heightMinus1) {\n yp += width;\n }\n }\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (y = _q = 0; 0 <= height ? _q < height : _q > height; y = 0 <= height ? ++_q : --_q) {\n p = yi << 2;\n pixels[p] = (r_sum * mul_sum) >> shg_sum;\n pixels[p + 1] = (g_sum * mul_sum) >> shg_sum;\n pixels[p + 2] = (b_sum * mul_sum) >> shg_sum;\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;\n r_sum += (r_in_sum += (stackIn.r = pixels[p]));\n g_sum += (g_in_sum += (stackIn.g = pixels[p + 1]));\n b_sum += (b_in_sum += (stackIn.b = pixels[p + 2]));\n stackIn = stackIn.next;\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n stackOut = stackOut.next;\n yi += width;\n }\n }\n return this;\n });\n return Caman.Filter.register(\"stackBlur\", function(radius) {\n return this.processPlugin(\"stackBlur\", [radius]);\n });\n })();\n\n Caman.Filter.register(\"threshold\", function(adjust) {\n return this.process(\"threshold\", function(rgba) {\n var luminance;\n\n luminance = (0.2126 * rgba.r) + (0.7152 * rgba.g) + (0.0722 * rgba.b);\n if (luminance < adjust) {\n rgba.r = 0;\n rgba.g = 0;\n rgba.b = 0;\n } else {\n rgba.r = 255;\n rgba.g = 255;\n rgba.b = 255;\n }\n return rgba;\n });\n });\n\n}).call(this);\n","(function ($) {\n 'use strict';\n\n if (!$.version || $.version.major < 2) {\n throw new Error('This version of OpenSeadragonImagefilters requires OpenSeadragon version 2.0.0+');\n }\n\n //should disable caman cache to prevent memory leak\n var caman = Caman;\n caman.Store.put = function () {\n };\n\n $.Viewer.prototype.imagefilters = function (options) {\n if (!this.imageFilterInstance || options) {\n options = options || {};\n options.viewer = this;\n this.imageFilterInstance = new $.ImagefilterTools(options);\n }\n return this.imageFilterInstance;\n };\n \n /**\n * @class ImagefilterTools\n * @classdesc Provides functionality for displaying imagefilters as rangesliders\n * @memberof OpenSeadragon\n * @param {Object} options\n */\n $.ImagefilterTools = function (options) {\n $.extend(true, this, {\n // internal state properties\n viewer: null,\n buttonActiveImg: false,\n\n // options\n showControl: true, //show button or not\n startOpen: false, //start viewer with ImageFilterTools open\n prefixUrl: null, //alternative location of images\n toolsLeft: null, //int for absolute positioning\n toolsTop: null, //int for absolute positioning\n toolsWidth: 180, //int width in pixels\n toolsHeight: 150, //int height in pixels\n popUpClass: null, //override standard styling, NB. you need to style everything\n navImages: { //images to use\n imagetools: {\n REST: 'imagetools_rest.png',\n GROUP: 'imagetools_grouphover.png',\n HOVER: 'imagetools_hover.png',\n DOWN: 'imagetools_pressed.png'\n }\n }, \n filters: [ //add filters here\n {\n filterName: 'brightness',\n min: -255,\n max: 255,\n callback: null,\n processor: function () {\n var setTo = getElementValueAsFloat('osd-filter-brightness');\n if (this.callback !== null) {\n this.callback(setTo);\n }\n return OpenSeadragon.Filters.BRIGHTNESS(setTo);\n }\n },\n {\n filterName: 'contrast',\n min: 0,\n max: 5,\n value: 1,\n defaultValue: 1,\n step: 0.1,\n callback: null,\n processor: function () {\n var setTo = getElementValueAsFloat('osd-filter-contrast');\n if (this.callback !== null) {\n this.callback(setTo);\n }\n return OpenSeadragon.Filters.CONTRAST(setTo);\n }\n }\n //Left below in code as example\n // saturation requires caman and caman requires reload of tiles. (see sync option)\n // {\n // filterName: 'saturation',\n // min: -100,\n // max: 100,\n // sync: false,\n // processor: function() {\n // var setTo = getElementValueAsFloat('osd-filter-saturation');\n // this.current = setTo;\n // return function (context, callback) {\n // caman(context.canvas, function () {\n // this.saturation(setTo);\n // this.render(callback);\n // });\n // this.current = setTo;\n // };\n // }\n // },\n // {\n // filterName: 'hue',\n // min: 0,\n // max: 100,\n // sync: false,\n // processor: function() {\n // var setTo = getElementValueAsFloat('osd-filter-hue');\n // return function (context, callback) {\n // caman(context.canvas, function () {\n // this.hue(setTo);\n // this.render(callback);\n // });\n // };\n // }\n // }\n ],\n //element: null,\n toggleButton: null\n }, options);\n\n $.extend(true, this.navImages, this.viewer.navImages);\n\n var prefix = this.prefixUrl || this.viewer.prefixUrl || '';\n var useGroup = this.viewer.buttons && this.viewer.buttons.buttons;\n\n if (this.showControl) {\n this.toggleButton = new $.Button({\n element: this.toggleButton ? $.getElement(this.toggleButton) : null,\n clickTimeThreshold: this.viewer.clickTimeThreshold,\n clickDistThreshold: this.viewer.clickDistThreshold,\n tooltip: $.getString('Tooltips.ImageTools') || 'Image tools',\n srcRest: prefix + this.navImages.imagetools.REST,\n srcGroup: prefix + this.navImages.imagetools.GROUP,\n srcHover: prefix + this.navImages.imagetools.HOVER,\n srcDown: prefix + this.navImages.imagetools.DOWN,\n onRelease: this.openTools.bind(this)\n });\n\n if (useGroup) {\n this.viewer.buttons.buttons.push(this.toggleButton);\n this.viewer.buttons.element.appendChild(this.toggleButton.element);\n }\n if (this.toggleButton.imgDown) {\n this.buttonActiveImg = this.toggleButton.imgDown.cloneNode(true);\n this.toggleButton.element.appendChild(this.buttonActiveImg);\n }\n }\n\n this.viewer.addHandler('open', function () {\n this.createPopupDiv();\n this.updateFilters();\n }.bind(this));\n\n if (this.startOpen) {\n this.viewer.addHandler('open', function () {\n this.openTools();\n }.bind(this));\n }\n };\n\n $.extend($.ImagefilterTools.prototype, $.ControlDock.prototype, /** @lends OpenSeadragon.ImagefilterTools.prototype */{\n\n /*\n Add popup div to viewer, and add range input elements per filter\n */\n createPopupDiv: function () {\n //check if tools popup exists and if not create based on filters\n var popup = $.getElement('osd-imagetools');\n if (!popup) {\n\n //alway render toolpopup center LEFT if nothing is provided\n var width = this.toolsWidth;\n var height = this.toolsHeight;\n\n var v = $.getElement(this.viewer.id);\n var viewerPosition = v.getBoundingClientRect();\n\n var popupTop = this.toolsTop || (viewerPosition.height / 2) - (height / 2);\n var popupLeft = this.toolsLeft || 10;\n\n popup = document.createElement('div');\n popup.id = 'osd-imagetools';\n if (this.popUpClass) {\n popup.class = this.popUpClass;\n } else {\n popup.style.display = 'none';\n popup.style.textAlign = 'center';\n popup.style.position = 'absolute';\n popup.style.border = '1px solid black';\n popup.style.backgroundColor = 'white';\n popup.style.width = width + 'px';\n popup.style.height = height + 'px';\n popup.style.top = popupTop + 'px';\n popup.style.left = popupLeft + 'px';\n }\n\n //add to controlls, needed for fullscreen\n this.viewer.addControl(popup, {});\n popup.style.display = 'none'; //add Controll sets display:block\n\n //add range input for all filters\n this.filters.map(function (filter) {\n var filterElement = document.createElement('input');\n filterElement.type = 'range';\n filterElement.min = filter.min;\n filterElement.max = filter.max;\n filterElement.step = filter.step || 1;\n filterElement.value = filter.value || 0;\n filterElement.id = 'osd-filter-' + filter.filterName;\n\n //add event to slider\n this.onRangeChange(filterElement);\n //add to tools popup with label\n var label = document.createElement('p');\n label.style.margin = '0';\n label.innerHTML = $.getString('Tool.' + filter.filterName) || filter.filterName;\n\n popup.appendChild(label);\n popup.appendChild(filterElement);\n }.bind(this));\n\n //add reset button\n var resetButton = document.createElement('button');\n resetButton.innerHTML = $.getString('Tool.reset') || 'reset';\n resetButton.style.display = 'block';\n resetButton.style.margin = '0 auto';\n resetButton.style.padding = '2px';\n\n //add functionality to reset button\n resetButton.addEventListener('click', function () {\n this.resetFilters();\n }.bind(this));\n popup.appendChild(resetButton);\n }\n },\n\n /**\n * Open the tools popup\n */\n openTools: function () {\n var popup = $.getElement('osd-imagetools');\n toggleVisablity(popup);\n },\n\n /**\n * Update filters via debounce so input events don't fire to soon after each other\n */\n updateFilters: debounce(updateFilters, 50),\n\n /**\n * Resets filters by setting range inputs to default value\n */\n resetFilters: function () {\n this.filters.map(function (filter) {\n var filterInput = $.getElement('osd-filter-' + filter.filterName);\n filterInput.value = filter.defaultValue || 0;\n });\n this.updateFilters();\n },\n\n /**\n * Add update event to element\n * @param rangeInputElmt\n * @param listener\n */\n onRangeChange: function (rangeInputElmt) {\n var inputEvtHasNeverFired = true;\n rangeInputElmt.addEventListener('input', function () {\n inputEvtHasNeverFired = false;\n this.updateFilters();\n }.bind(this));\n //needed for older IE should we support it?\n rangeInputElmt.addEventListener('change', function () {\n if (inputEvtHasNeverFired) {\n this.updateFilters();\n }\n }.bind(this));\n }\n });\n\n /**\n * @param {callback} func\n * @param {Int} wait\n * @param {Bool} immediate\n */\n function debounce(func, wait, immediate) {\n var timeout;\n return function() {\n var context = this, args = arguments;\n var later = function() {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n }\n\n /**\n * Toggle element display property\n * @param element\n */\n function toggleVisablity(element) {\n //var isShown = element.currentStyle ? element.currentStyle.display : getComputedStyle(element, null).display;\n var isShown = (window.getComputedStyle ? getComputedStyle(element, null) : element.currentStyle).display;\n if (isShown !== 'none') {\n element.style.display = 'none';\n } else {\n element.style.display = 'block';\n }\n }\n\n /**\n * get Element value as Float\n * @param element\n * @returns {Number}\n */\n function getElementValueAsFloat(element) {\n return parseFloat($.getElement(element).value);\n }\n\n /**\n * Updates filters of viewers\n */\n function updateFilters() {\n var filters = [];\n var sync = true;\n\n this.filters.map(function (filter) {\n filters.push(filter.processor());\n if (filter.sync === false) {\n sync = false;\n }\n });\n\n this.viewer.setFilterOptions({\n filters: {\n processors: filters\n },\n loadMode: sync ? 'sync' : 'async'\n });\n }\n\n})(OpenSeadragon, Caman);\n"]}