konva/src/filters/Sepia.ts
2024-10-29 14:30:37 +01:00

28 lines
726 B
TypeScript

import { Filter } from '../Node';
// based on https://stackoverflow.com/questions/1061093/how-is-a-sepia-tone-created
/**
* @function
* @name Sepia
* @memberof Konva.Filters
* @param {Object} imageData
* @example
* node.cache();
* node.filters([Konva.Filters.Sepia]);
*/
export const Sepia: Filter = function (imageData) {
const data = imageData.data,
nPixels = data.length;
for (let i = 0; i < nPixels; i += 4) {
const r = data[i + 0];
const g = data[i + 1];
const b = data[i + 2];
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);
}
};