diff --git a/dist/bundle.js b/dist/bundle.js
index d761be5..f044832 100644
--- a/dist/bundle.js
+++ b/dist/bundle.js
@@ -1,6 +1,6 @@
/*
- * lena.js - 0.3.1
+ * lena.js - 0.5.0
* Library for image processing
*
* Made by Davidson Fellipe.
@@ -21,6 +21,49 @@ const invert = function (pixels) {
return pixels
};
+const contrast = function (pixels, amount) {
+ const level = Math.pow((amount + 100) / 100, 2);
+
+ let data = pixels.data;
+ let r;
+ let g;
+ let b;
+
+ for (let i = 0; i < data.length; i += 4) {
+ r = data[i];
+ g = data[i + 1];
+ b = data[i + 2];
+
+ r = r / 255;
+ r -= 0.5;
+ r *= level;
+ r += 0.5;
+ r *= 255;
+
+ g = g / 255;
+ g -= 0.5;
+ g *= level;
+ g += 0.5;
+ g *= 255;
+
+ b = b / 255;
+ b -= 0.5;
+ b *= level;
+ b += 0.5;
+ b *= 255;
+
+ r = r < 0 ? 0 : r > 255 ? 255 : r;
+ g = g < 0 ? 0 : g > 255 ? 255 : g;
+ b = b < 0 ? 0 : b > 255 ? 255 : b;
+
+ data[i] = r;
+ data[i + 1] = g;
+ data[i + 2] = b;
+ }
+
+ return pixels
+};
+
const mirror = function (pixels) {
let tmp = [];
const width = pixels.width * 4;
@@ -111,7 +154,7 @@ const brightness = function (pixels, amount = 0) {
return pixels
};
-const sepia = function (pixels) {
+const sepia = function (pixels, amount = 100) {
for (let i = 0; i < pixels.data.length; i += 4) {
let r = pixels.data[i],
g = pixels.data[i + 1],
@@ -151,16 +194,15 @@ const saturation = function (pixels) {
return pixels
};
-const thresholding = function (pixels, args) {
+const thresholding = function (pixels, amount = 128) {
for (let i = 0; i < pixels.data.length; i += 4) {
let r = pixels.data[i],
g = pixels.data[i + 1],
b = pixels.data[i + 2];
let v = 0.2126 * r + 0.7152 * g + 0.0722 * b;
- let thr = args || 128;
- pixels.data[i] = pixels.data[i + 1] = pixels.data[i + 2] = v > thr ? 255 : 0;
+ pixels.data[i] = pixels.data[i + 1] = pixels.data[i + 2] = v > amount ? 255 : 0;
}
return pixels
@@ -494,6 +536,7 @@ exports.bigGaussian = bigGaussian;
exports.blue = blue;
exports.brightness = brightness;
exports.canny = canny;
+exports.contrast = contrast;
exports.filterImage = filterImage;
exports.gaussian = gaussian;
exports.getImage = getImage;
diff --git a/dist/bundle.min.js b/dist/bundle.min.js
index 05c25ab..f44c76a 100644
--- a/dist/bundle.min.js
+++ b/dist/bundle.min.js
@@ -1 +1 @@
-var LenaJS=function(t){"use strict";const a=function(t){return t<0?0:t>255?255:t},e=function(t,a){for(let e=0;er?255:0}return t},n=function(t,a){let e=Math.round(Math.sqrt(a.length)),n=Math.floor(e/2),r=t.data,d=t.width,o=t.height,l=document.createElement("canvas").getContext("2d").createImageData(d,o);for(let t=0;t=0&&g=0&&s=0&&e=0&&sh?0:h,c=r[n+1]*Math.abs(Math.cos(a[u+1]-o))>c?0:c,f=r[n+2]*Math.abs(Math.cos(a[u+2]-o))>f?0:f}}l.data[u]=2*h,l.data[u+1]=2*c,l.data[u+2]=2*f,l.data[u+3]=255}return l}(r(t),a.direction),e(t,8)},t.filterImage=function(t,a,e,n=0){let r=[u(e),n];return i(t,a.apply(null,r))},t.gaussian=function(t){return n(t,[1/16,2/16,1/16,2/16,.25,2/16,1/16,2/16,1/16])},t.getImage=u,t.grayscale=function(t){for(let a=0;a255?255:t},e=function(t,a=128){for(let e=0;ea?255:0}return t},n=function(t,a){let e=Math.round(Math.sqrt(a.length)),n=Math.floor(e/2),r=t.data,d=t.width,o=t.height,l=document.createElement("canvas").getContext("2d").createImageData(d,o);for(let t=0;t=0&&g=0&&s=0&&e=0&&sh?0:h,c=r[n+1]*Math.abs(Math.cos(a[u+1]-o))>c?0:c,f=r[n+2]*Math.abs(Math.cos(a[u+2]-o))>f?0:f}}l.data[u]=2*h,l.data[u+1]=2*c,l.data[u+2]=2*f,l.data[u+3]=255}return l}(r(t),a.direction),e(t,8)},t.contrast=function(t,a){const e=Math.pow((a+100)/100,2);let n,r,d,o=t.data;for(let t=0;t255?255:n,r=r<0?0:r>255?255:r,d=d<0?0:d>255?255:d,o[t]=n,o[t+1]=r,o[t+2]=d;return t},t.filterImage=function(t,a,e,n=0){let r=[u(e),n];return i(t,a.apply(null,r))},t.gaussian=function(t){return n(t,[1/16,2/16,1/16,2/16,.25,2/16,1/16,2/16,1/16])},t.getImage=u,t.grayscale=function(t){for(let a=0;a
-
![](assets/img/coffee.jpg)
+
@@ -21,6 +21,12 @@
var result = document.getElementById('result')
var filters = [
+ { name: 'contrast', amount: 100 },
+ { name: 'contrast', amount: 50 },
+ { name: 'contrast', amount: 0 },
+ { name: 'contrast', amount: -50 },
+ { name: 'contrast', amount: -100 },
+ { name: 'grayscale', amount: 0 },
{ name: 'brightness', amount: -50 },
{ name: 'brightness', amount: 0 },
{ name: 'brightness', amount: 50 },
@@ -31,7 +37,6 @@
{ name: 'invert', amount: 0 },
{ name: 'mirror', amount: 0 },
{ name: 'thresholding', amount: 0 },
- { name: 'grayscale', amount: 0 },
{ name: 'sepia', amount: 0 },
{ name: 'saturation', amount: 0 },
{ name: 'roberts', amount: 0 },
diff --git a/docs/assets/img/camera.png b/docs/assets/img/camera.png
new file mode 100644
index 0000000..48b2abe
Binary files /dev/null and b/docs/assets/img/camera.png differ
diff --git a/docs/assets/img/sf.png b/docs/assets/img/sf.png
new file mode 100644
index 0000000..62c81c4
Binary files /dev/null and b/docs/assets/img/sf.png differ
diff --git a/lib/filters/contrast.js b/lib/filters/contrast.js
new file mode 100644
index 0000000..986e479
--- /dev/null
+++ b/lib/filters/contrast.js
@@ -0,0 +1,44 @@
+const contrast = function (pixels, amount) {
+ const level = Math.pow((amount + 100) / 100, 2)
+
+ let data = pixels.data
+ let r
+ let g
+ let b
+
+ for (let i = 0; i < data.length; i += 4) {
+ r = data[i]
+ g = data[i + 1]
+ b = data[i + 2]
+
+ r = r / 255
+ r -= 0.5
+ r *= level
+ r += 0.5
+ r *= 255
+
+ g = g / 255
+ g -= 0.5
+ g *= level
+ g += 0.5
+ g *= 255
+
+ b = b / 255
+ b -= 0.5
+ b *= level
+ b += 0.5
+ b *= 255
+
+ r = r < 0 ? 0 : r > 255 ? 255 : r
+ g = g < 0 ? 0 : g > 255 ? 255 : g
+ b = b < 0 ? 0 : b > 255 ? 255 : b
+
+ data[i] = r
+ data[i + 1] = g
+ data[i + 2] = b
+ }
+
+ return pixels
+}
+
+export default contrast
diff --git a/lib/index.js b/lib/index.js
index 3e80b32..7d9f070 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -1,4 +1,5 @@
export { default as invert } from './filters/invert'
+export { default as contrast } from './filters/contrast'
export { default as mirror } from './filters/mirror'
// RGB filters
diff --git a/package.json b/package.json
index 8cd36b3..2321add 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "lena.js",
- "version": "0.4.2",
+ "version": "0.5.0",
"description": "Library for image processing",
"homepage": "https://github.com/davidsonfellipe/lena-js/",
"author": {