如何使用帆布处理图像

  介绍

如何使用帆布处理图像?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

画布的图像处理能力通过ImageData对象来处理像素数据。主要的API如下:

<李>

createImageData():创建一个空白的ImageData对象

<李>

getImageData():获取画布像素数据,每一个像素点有4个值和终止,和终止,李rgba

<李>

putImageData():将像素数据写入画布

imageData =, {   宽度:才能,号码,   高度:才能,号码,   数据:才能Uint8ClampedArray   }

宽度是帆布画布的宽或者说x轴的像素数量;高度是画布的高或者说y轴的像素数量,数据是画布的像素数据数组,总长度w * h * 4,每4个值(rgba)代表一个像素。

<强>对图片的处理

下面,我们通过几个例子来看下帆布基础的图片处理能力。

原图效果:

如何使用帆布处理图像

const  cvs =, . getelementbyid (“canvas");   const  ctx =, cvs.getContext (“2 d");   const  img =, new 图像();   img.src=https://www.yisu.com/zixun/蓖计琔RL”;   img。onload=function () {   ctx。drawImage (img 0 0 w h);   }

<>强底片/负片效果

算法:将255与像素点的rgb的差,作为当前值。

function 负(x), {   let 才能;y =, 255,安康;x;   return 才能;y;   }

效果图:

如何使用帆布处理图像

const  imageData =,, ctx.getImageData (0, 0, w, h);   {const  data },=, imageData;   let  l =, data.length;   (let 小姐:=,0;,小姐:& lt;, l;,我+=4),{   const 才能;r =,数据(我);   const 才能;g =,数据(小姐:+,- 1);   const 才能;b =,数据(小姐:+,2);   数据才能[我],=,- (r);   数据才能(小姐:+,- 1),=,- (g);   数据才能[小姐:+,2],=,- (b);   }   ctx.putImageData (imageData, 0, 0),

<强>单色效果

单色效果就是保留当前像素的rgb三个值中的一个,去除其他色值。

为(let 小姐:=,0;,小姐:& lt;, l;,我+=4),{,//去除了,r , g 的值   数据才能[我],=,0;   数据才能(小姐:+,- 1),=,0;   }

效果图:

如何使用帆布处理图像“>,</p> <p> <强>灰度图</强> </p> <p>灰度图:每个像素只有一个色值的图像。0到255的色值,颜色由黑变白。</p> <pre类=为(let 小姐:=,0;,小姐:& lt;, l;,我+=4),{   const 才能;r =,数据(我);   const 才能;g =,数据(小姐:+,- 1);   const 才能;b =,数据(小姐:+,2);   const 才能;gray =, grayFn (r, g, b);   数据才能[我],=,灰色;   数据才能(小姐:+,- 1),=,灰色;   数据才能[小姐:+,2],=,灰色;   }

算法1和终止,和终止,平均法:

const  gray =,(时间+ r  g  +, b),/, 3;

效果图:

如何使用帆布处理图像“>,</p> <p>算法2,终止,和终止,人眼感知:根据人眼对红绿蓝三色的感知程度:绿比;红比;蓝,给定权重划分</p> <pre类= const  gray =, r  *, 0.3, +, g  *, 0.59, +, b  *,

0.11效果图:

如何使用帆布处理图像

除此以外,还有:

取最大值或最小值。

const  grayMax =, Math.max (r, g, b),,//,值偏大,较亮   const  grayMin =, Math.min (r, g, b),,//,值偏小,较暗

取单一通道,即rgb三个值中的一个。

, <强>二值图

算法:确定一个色值,比较当前的rgb值,大于这个值显示黑色,否则显示白色。

为(let 小姐:=,0;,小姐:& lt;, l;,我+=4),{   const 才能;r =,数据(我);   const 才能;g =,数据(小姐:+,- 1);   const 才能;b =,数据(小姐:+,2);   const 才能;gray =, gray1 (r, g, b);   const 才能;binary =, gray 祝辞,126,,255,,0;   数据才能[我],=,二进制;   数据才能(小姐:+,- 1),=,二进制;   数据才能[小姐:+,2],=,二进制;   }

如何使用帆布处理图像