用canvas给视频图片添加特效
Canvas制作视频图片特效
1. Canvas介绍
1.1Canvas是html5上的一个画布标签,功能有点类似java的swing.可以在canvas上画线条 弧线, 文字 就是画布的功能.
具体提供的js函数看http://www.w3school.com.cn/tags/html_ref_canvas.asp
2 简单介绍一下使用:
Var canvas = document.documentElementById(“canvasId”);
Var ctx = canvas.getContext(“2d”);//获取维数对象
ctx.drawImage(img);//img为dom图片对象, 还有其他可选参数 剪切坐标 和 放置到canvas上的坐标
3给图片添加特效
原理: 图片通过drawImage函数 绘制到 canvas 上之后, 用getImageData函数可以获得
图片的imageData对象, imageData里有一个data数组存放的是 此图片的r g b a (三原色 和透明度). 将取出的data数组修改成对应特效数组, 用putImageData函数 重新数据放回canvas上即可.
小demo 代码(将图片设置成灰白效果 原理: 将r g b 设置成rgb平均数):
<!---------------- html --------------------->
<img id=”image1” src=”/img.jpg” />
<canvas id=”can” width=”500” heigth=”300”> </canvas>
<!-- 注意: canvas的宽高只能通过属性设置, 在style中设置没有效果 -->
<!---------------- js --------------------->
Var img = document.documentElementById(“imgage1”);
Var canvas = document.documentElementById(“can”);
Var ctx = canvas.getContext(“2d”);//获取维数对象
ctx.drawImage(img);
Var imgData = ctx.getImageData(0, 0, 500, 300);
For ( var i = 0, len = imgData.data.length, avgRgb; i < len; i += 4) {
avgRgb = (imgData.data[i] + imgData.data[i + 1] + imgData.data[i + 2]) / 3;
imgData.data[i] = avgRgb;
imgData.data[i + 1] = avgRgb;
imgData.data[i + 2 ] = avgRgb;
}
ctx.putImageData(imgData, 0, 0);
4 给视频添加特效
原理: 与图片的原理类似,只是要绘制视频每一帧的画面, 视频每播放一帧,就在canvas上绘制一帧画面
小demo 代码 (将视频画面红色调高 原理: 将r g b 中的r 调高)
<!---------------- html --------------------->
<video id=”vid1” src=”/vid1.mp4” autoplay/>
<canvas id=”can” width=”500” heigth=”300”> </canvas>
<!---------------- js --------------------->
Var vid= document.documentElementById(“vid1”);
Var canvas = document.documentElementById(“can”);
Var ctx = canvas.getContext(“2d”);//获取2维对象
function drawVidEffect() {
ctx.drawImage(vid);
Var imgData = ctx.getImageData(0, 0, 500, 300);
For ( var i = 0, len = imgData.data.length, avgRgb; i < len; i += 4) {
imgData.data[i] += 50;
}
ctx.putImageData(imgData, 0, 0);
setTimeout( drawVidEffect, 20 );
}
5 注意
如果视频或者图片所在的域名 跟canvas所在域名不一样 或者 不在服务器上运行 会报错:
Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.
解决办法:将图片或者视频加上属性crossOrigin但是添加后不能更换src地址
详见:
http://camnpr.com/archives/1117.html
http://camnpr.com/TuiJianTools/html5/canvas-cross-domain-images.html
用canvas给视频图片添加特效的更多相关文章
- Win10技巧:使用“照片”应用剪辑视频、添加特效
Win10内置了很多实用的应用,你不仅可以通过“Win键+G”快速录制电脑屏幕,如软件操作.游戏界面等,你还可以利用“照片”应用来对视频进行快速的剪辑,把录制前后多余的内容去除,同时你也可以对游戏中的 ...
- 基于HTML5 Canvas实现的图片马赛克模糊特效
效果请点击下面网址: http://hovertree.com/texiao/html5/1.htm 一.开门见山受美国肖像画家Chuck Close的启发,此脚本通过使用HTML5 canvas元素 ...
- 使用Kdenlive为视频加入马赛克特效
Kdenlive(KDE Non-Linear Video Editor)是一种基于MLT框架.KDE和Qt的自由开源的非线性影片编辑器.其底层包含了FFmpeg,所以可以支持FFmpeg中的所有视频 ...
- 使用图片视频展示插件blueimp Gallery改造网站的视频图片展示
在很多情况下,我们网站可能会展示我们的产品图片.以及教程视频等内容,结合一个比较好的图片.视频展示插件,能够使得我们的站点更加方便使用,也更加酷炫,在Github上有很多相关的处理插件可以找来使用,有 ...
- 在object,embed上添加跳转链接(视频上添加跳转)
今天遇到个问题,就是在视频上添加跳转链接时,谷歌浏览器能正常跳转,但是ie下,却无效,视频使用object引入,<a>标签跟随其后采用绝对定位,和平时的图片加跳转操作一样.原来是需要加上& ...
- 基于 HTML5 Canvas 实现的文字动画特效
前言 文字是网页中最基本的元素,一般我们在网页上都是展示的静态文字,但是就效果来说,还是比较枯燥的.文字淡入淡出的动画效果在项目中非常实用,如果有某些关键的文字,可以通过这种动态的效果来提醒用户阅读. ...
- 微信小程序--canvas画布实现图片的编辑
技术:微信小程序 概述 上传图片,编辑图片大小,添加文字,改变文字颜色等 详细 代码下载:http://www.demodashi.com/demo/14789.html 概述 微信小程序--ca ...
- [Xcode 实际操作]六、媒体与动画-(5)使用CoreImage框架给图片添加马赛克效果
目录:[Swift]Xcode实际操作 本文将演示如何使用CoreImage图像处理框架,给图片添加像素化的滤镜效果. 在项目导航区,打开视图控制器的代码文件[ViewController.swift ...
- android图像处理系列之四-- 给图片添加边框(上)
图片处理时,有时需要为图片加一些边框,下面介绍一种为图片添加简单边框的方法. 基本思路是:将边框图片裁剪成八张小图片(图片大小最好一致,不然后面处理会很麻烦),分别对应左上角,左边,左下角,下边,右下 ...
随机推荐
- [Swift]LeetCode288. 唯一单词缩写 $ Unique Word Abbreviation
An abbreviation of a word follows the form <first letter><number><last letter>. Be ...
- [Swift]LeetCode525. 连续数组 | Contiguous Array
Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1. ...
- 由浅入深的讲述Get和Post的区别
对于网上对get和post区别的长篇大论,我只想说一些干货其中最重要的是:GET和POST本质上两者没有任何区别.他们都是HTTP协议中的请求方法.底层实现都是基于TCP/IP协议.所谓区别,只是浏览 ...
- Android-线程池下载多个图片并保存,如果本地有该图,则不下载,直接展示到view
做了个工具方法,用来下载图片,如果本地有这个图,则不下载,直接展示到view setHP()方法可以多次使用,因为使用了线程池,所以是个异步操作,如果使用的多,建议根据需要增加线程池的线程数量 看代码 ...
- 使用vue-cli搭建vue项目
1.安装node环境,然后在命令行输入node -v 和npm -v 查看版本号 2.在正式开始项目之前我们先介绍一下vue-cli,vue-cli是一个脚手架工具,vue-cli是帮助我们写好vue ...
- MySQL casting from decimal to string(mysql decimal 转 varchar)
今天群里一个哥们问我mysql怎么将decimal转成varchar,经过查阅资料发现,mysql好像不能将decimal直接转换成varchar,但是可以转成char,原文链接:http://sta ...
- Python __new__ 实现单例模式 python经典面试题
话不多说,上代码 class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance' ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- 从零开始学习PYTHON3讲义(五)while循环和棋盘麦粒问题
<从零开始PYTHON3>第五讲 上一节课重点学习了字符串,并且传递了一个重要的理念,就是程序要对开发人员自己和用户都足够友好.在这个过程中,利用字符串给出充分.完整.准确的提示是非常重 ...
- MVC模型注解
首先,model是通过ef自动是生成的实体. 添加模型注解的意思就是在注册的时候自动验证用户所填信息是否符合我们规定的要求(这是我们做这个例子的要求) 首先给大家先展示一下效果吧. 然后Email是点 ...