JS去除图片水印

今天帮助同事去除一个文件的水印,找了很多工具,要么收费,要么去除效果不理想。最终在GITHUB上看到一位网友分享的JS去除图片水印。本篇笔记仅做收藏。

JS去水印源码:

  1. function getResultImgUrl(img) {
  2.     debugger
  3.     var canvas = document.getElementById("canvas");
  4.     canvas.width = img.width;
  5.     canvas.height = img.height;
  6.     var ctx = canvas.getContext("2d");
  7.     ctx.drawImage(img, 0, 0);
  8.     var c = ctx.getImageData(0, 0, img.width, img.height);
  9.     c.data.forEach((val, index) => {
  10.         if (val <= 15 && val !== 0) {
  11.             c.data[index] = 0;
  12.         }
  13.     });
  14.     console.log(c.data);
  15.     var colorList = [];
  16.     //chrome浏览器报错,ie浏览器报安全错误信息,原因往下看
  17.     for (var i = 0; i < c.height; ++i) {
  18.         for (var j = 0; j < c.width; ++j) {
  19.             var x = i * 4 * c.width + 4 * j,  //imagedata读取的像素数据存储在data属性里,是从上到下,从左到右的,每个像素需要占用4位数据,分别是r,g,b,alpha透明通道
  20.                 r = c.data[x],
  21.                 g = c.data[x + 1],
  22.                 b = c.data[x + 2],
  23.                 a = c.data[x + 3];
  24.             if (a !== 0) {
  25.                 r = 255;
  26.                 g = 255;
  27.                 b = 255;
  28.             }
  29.             colorList.push({
  30.                 r, g, b, a
  31.             })
  32.         }
  33.     }
  34.     console.log(colorList);
  35.     let res = [];
  36.     // for (let i = 0; i < colorList.length * 4; i ++) {
  37.     //     res.
  38.     // }
  39.     colorList.forEach(item => {
  40.         res.push(item.r);
  41.         res.push(item.g);
  42.         res.push(item.b);
  43.         res.push(item.a);
  44.     });
  45.     for (let i = 0; i < res.length; i ++) {
  46.         c.data[i] = res[i];
  47.     }
  48.     console.log(c);
  49.     ctx.putImageData(c, 0, 0, 0, 0, 256, 256);
  50.     document.getElementById('btn').href = canvas.toDataURL();
  51. }
  52. function changepic() {
  53.     var reads = new FileReader();
  54.     var f = document.getElementById('upload').files[0];
  55.     reads.readAsDataURL(f);
  56.     reads.onload = function (e) {
  57.         document.getElementById('show').src = this.result;
  58.     };
  59. }
  60. window.onload = function () {
  61.     document.getElementById('upload').onchange = function () {
  62.         changepic()
  63.     };
  64.     document.getElementById('downloadFileName').onchange = function () {
  65.         document.getElementById('btn').download = this.value;
  66.     }
  67.     var img = document.getElementById('show');
  68.     img.src = "";
  69.     img.isLoad = false;
  70.     img.onload = function () {
  71.         if (!img.isLoad && img.src) {
  72.             getResultImgUrl(img);
  73.             img.isLoad = true;
  74.         }
  75.     }
  76. }

github地址:https://github.com/Caozefu/ImageDewatermarking

在线演示:https://caozefu.github.io/ImageDewatermarking/

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!