File size: 1,407 Bytes
d6dc5c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
let img = new Image();
let canvas = document.getElementById("canvas");
let ctx = canvas.getContext("2d");

document.getElementById("upload").onchange = e => {
  let file = e.target.files[0];
  img.src = URL.createObjectURL(file);
  
  img.onload = () => {
    canvas.width = img.width;
    canvas.height = img.height;
    draw();
  }
};

function draw() {
  ctx.filter = `
    brightness(${document.getElementById("brightness").value}%)
    contrast(${document.getElementById("contrast").value}%)
    blur(${document.getElementById("blur").value}px)
    grayscale(${document.getElementById("gray").value}%)
  `;
  
  ctx.drawImage(img, 0, 0, canvas.width, canvas.height);

  let sharpenValue = document.getElementById("sharpen").value;
  if (sharpenValue > 0) applySharpen(sharpenValue);
}

function applySharpen(amount) {
  let imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  let pixels = imgData.data;

  for (let i = 0; i < pixels.length; i+=4) {
    pixels[i] = pixels[i] + amount * 10;
    pixels[i+1] = pixels[i+1] + amount * 10;
    pixels[i+2] = pixels[i+2] + amount * 10;
  }
  ctx.putImageData(imgData, 0, 0);
}

document.querySelectorAll("input[type=range]").forEach(r => {
  r.oninput = draw;
});

document.getElementById("download").onclick = () => {
  let link = document.createElement("a");
  link.download = "edited.png";
  link.href = canvas.toDataURL();
  link.click();
};