mirror of
https://github.com/konvajs/konva.git
synced 2025-10-15 12:34:52 +08:00
rewrote sepia filter from scratch
This commit is contained in:
@@ -1,51 +1,29 @@
|
||||
// based on https://stackoverflow.com/questions/1061093/how-is-a-sepia-tone-created
|
||||
|
||||
/**
|
||||
* Sepia Filter
|
||||
* Based on: Pixastic Lib - Sepia filter - v0.1.0
|
||||
* Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
|
||||
* @function
|
||||
* @name Sepia
|
||||
* @memberof Konva.Filters
|
||||
* @param {Object} imageData
|
||||
* @author Jacob Seidelin <jseidelin@nihilogic.dk>
|
||||
* @license MPL v1.1 [http://www.pixastic.com/lib/license.txt]
|
||||
* @example
|
||||
* node.cache();
|
||||
* node.filters([Konva.Filters.Sepia]);
|
||||
*/
|
||||
|
||||
export const Sepia = function(imageData) {
|
||||
var data = imageData.data,
|
||||
w = imageData.width,
|
||||
y = imageData.height,
|
||||
w4 = w * 4,
|
||||
offsetY,
|
||||
x,
|
||||
offset,
|
||||
or,
|
||||
og,
|
||||
ob,
|
||||
nPixels = data.length,
|
||||
i,
|
||||
r,
|
||||
g,
|
||||
b;
|
||||
|
||||
do {
|
||||
offsetY = (y - 1) * w4;
|
||||
x = w;
|
||||
do {
|
||||
offset = offsetY + (x - 1) * 4;
|
||||
for (i = 0; i < nPixels; i += 4) {
|
||||
r = data[i + 0];
|
||||
g = data[i + 1];
|
||||
b = data[i + 2];
|
||||
|
||||
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;
|
||||
data[offset + 3] = data[offset + 3];
|
||||
} while (--x);
|
||||
} while (--y);
|
||||
data[i + 0] = Math.min(255, r * 0.393 + g * 0.769 + b * 0.189);
|
||||
data[i + 1] = Math.min(255, r * 0.349 + g * 0.686 + b * 0.168);
|
||||
data[i + 2] = Math.min(255, r * 0.272 + g * 0.534 + b * 0.131);
|
||||
}
|
||||
};
|
||||
|
Reference in New Issue
Block a user