如何使用帆布处理图像?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
画布的图像处理能力通过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; }
效果图:
为(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;
效果图:
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],=,二进制; }如何使用帆布处理图像