本文摘自PHP中文网,作者青灯夜游,侵删。
这篇文章主要介绍了canvas像素点操作之视频绿幕抠图的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 本文介绍了canvas像素点操作之视频绿幕抠图,分享给大家,具体如下:
用法:
1 | context.putImageData(imgData, x, y, dX, dY, dWidth, dHeight);
|
下面的栗子简单实现了几个简单的滤镜效果,具体算法参考的这里,学过《数字图像处理》的同学应该对此理解更深刻。
demo
该栗子纯属为了演示功能而做,如果只强调效果而不在乎数据的话,用CSS3的filter属性便能高效又轻松地搞定。
部分代码
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 52 53 54 55 56 57 58 59 60 61 62 | import imgUrl from './component/sample.jpg' ;
export default {
data () {
return {
imgUrl: imgUrl
}
},
methods: {
onOperate1 () {
this .ctx.putImageData( this .onCompute1(), 0, 0);
},
onOperate2 () {
this .ctx.putImageData( this .onCompute2(), 0, 0);
},
...
onCancel () {
this .reload();
},
onCompute1 () {
let data = this .frameData.data;
for (let i = 0; i < this .imgDataLength; i += 4) {
let r = data[i + 0],
g = data[i + 1],
b = data[i + 2];
data[i + 0] = 255 - r;
data[i + 1] = 255 - g;
data[i + 2] = 255 - b;
}
return this .frameData;
},
onCompute2 () {
let data = this .frameData.data;
for (let i = 0; i < this .imgDataLength; i += 4) {
data[i] = Math.abs(data[i + 1] - data[i + 2] + data[i + 1] + data[i]) * data[i] / 256;
data[i + 1] = Math.abs(data[i + 2] - data[i + 1] + data[i + 2] + data[i]) * data[i] / 256;
data[i + 2] = Math.abs(data[i + 2] - data[i + 1] + data[i + 2] + data[i]) * data[i + 1] / 256;
}
return this .frameData;
},
...
},
mounted () {
this .canvas = this .$refs[ 'canvas' ];
this .ctx = this .canvas.getContext( '2d' );
this .reload();
}
}
|
上周跟同学去了一趟溧阳天目湖的南山竹海,在景区被忽悠拍了一张照片,就是这张 ――
然后被朋友圈吐槽抠图。其实当时就是站在一块绿幕前拍的:joy: 。
阅读剩余部分
相关阅读 >>
html5 canvas用来绘制弧形的代码实现
关于canvas与image的互相转换
html5中canvas与svg有什么区别
html5 canvas实现画直线与设置线条的样式
html5 canvas常用属性方法(介绍)
如何利用canvas实现按住鼠标移动绘制出轨迹
html5使用canvas实现跟随光标跳动的火焰效果
html5中canvas的问题总结
h5 canvas api中drawimage(图像进行缩放或裁剪)的使用实例
如何使用html5 canvas实现图像的马赛克
更多相关阅读请进入《canvas》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » canvas像素点操作之视频绿幕抠图