From 14570f7bed307ee4f22dd38c2e8d18f0d5ab24f4 Mon Sep 17 00:00:00 2001 From: Barrett Harber Date: Mon, 25 Nov 2013 20:39:08 -0500 Subject: [PATCH] Added Sepia Filter Add Sepia Filter from Pixastic Library --- Gruntfile.js | 3 ++- src/filters/Sepia.js | 48 +++++++++++++++++++++++++++++++++ test/runner.html | 1 + test/unit/filters/Sepia-test.js | 28 +++++++++++++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 src/filters/Sepia.js create mode 100644 test/unit/filters/Sepia-test.js diff --git a/Gruntfile.js b/Gruntfile.js index debba9c7..a8909981 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -43,7 +43,8 @@ module.exports = function(grunt) { 'src/filters/Blur.js', 'src/filters/Mask.js', 'src/filters/ColorPack.js', - 'src/filters/ConvolvePack.js' + 'src/filters/ConvolvePack.js', + 'src/filters/Sepia.js' ]; // Project configuration. diff --git a/src/filters/Sepia.js b/src/filters/Sepia.js new file mode 100644 index 00000000..30ba6f8e --- /dev/null +++ b/src/filters/Sepia.js @@ -0,0 +1,48 @@ +(function() { + /** + * Sepia Filter + * Based on: Pixastic Lib - Sepia filter - v0.1.0 + * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ + * @function + * @memberof Kinetic.Filters + * @param {Object} imageData + * @author Jacob Seidelin + * @license MPL v1.1 [http://www.pixastic.com/lib/license.txt] + */ + + Kinetic.Filters.Sepia = function(imageData) { + var data = imageData.data, + w = imageData.width, + y = imageData.height, + w4 = w*4, + offsetY, + x, + offset, + or, + og, + ob, + r, + g, + b; + + do { + offsetY = (y-1)*w4; + x = w; + do { + offset = offsetY + (x-1)*4; + + or = data[offset]; + og = data[offset+1]; + ob = data[offset+2]; + + r = or * 0.393 + og * 0.769 + ob * 0.189; + g = or * 0.349 + og * 0.686 + ob * 0.168; + b = or * 0.272 + og * 0.534 + ob * 0.131; + + data[offset] = r > 255 ? 255 : r; + data[offset+1] = g > 255 ? 255 : g; + data[offset+2] = b > 255 ? 255 : b; + } while (--x); + } while (--y); + }; +})(); \ No newline at end of file diff --git a/test/runner.html b/test/runner.html index 025dc40f..e55c12db 100644 --- a/test/runner.html +++ b/test/runner.html @@ -82,6 +82,7 @@ + diff --git a/test/unit/filters/Sepia-test.js b/test/unit/filters/Sepia-test.js new file mode 100644 index 00000000..05b07757 --- /dev/null +++ b/test/unit/filters/Sepia-test.js @@ -0,0 +1,28 @@ +suite('Sepia', function() { + // ====================================================== + test('basic', function(done) { + var stage = addStage(); + + var imageObj = new Image(); + imageObj.onload = function() { + + var layer = new Kinetic.Layer(); + darth = new Kinetic.Image({ + x: 10, + y: 10, + image: imageObj, + draggable: true + }); + + layer.add(darth); + stage.add(layer); + + darth.setFilter(Kinetic.Filters.Sepia); + layer.draw(); + + done(); + }; + imageObj.src = 'assets/darth-vader.jpg'; + + }); +}); \ No newline at end of file