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
- +
@@ -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": {