HTML5实验室简介之Canvas图像处理(一)

作为一个前端,想必对HTML5都不陌生,特别是移动端,如今已经比较火了,捞金量远胜于PC端,与其说HTML5是一项Web新时代革命性的技术,不如说其是现代化Web应用的新理念;一方面结合JavaScript,前端的羽翼更加丰满;另一方面,跨终端将Web应用推向了一个新的高度;你看到的视觉将更加高端、大气、炫酷;你浏览时的交互体验将更加人性化;你的设备消耗大大降低,运行更流畅;总之,你会惊叹,同时你会很舒服!而这一切都是基于HTML5的!

作为一个小前端,才疏学浅,个人小站(花满楼:http://www.famanoder.com)HTML5实验室板块,将逐步整理一些HTML5小应用和个人心得,愚论拙见,不才献丑!这里没有知识点的详解,没有一个个Demo供君Copy,这里你看到的都是一个整体,只是这个整体是由HTML5的一些知识点汇聚而成,因为我认为所有的Demo都不算是程序!

HTML5最吸引人的地方之一必然有Canvas,他提供了操作网页画布的一系列接口,你可以直接在html上进行图形操作,并且可以控制区域内的每一个像素点!比如:生成缩略图、打马赛克、调整图像大小、甚至实现类似PS的滤镜等。精彩无限,由你发现!

废话不多说了。首先需要把图片弄上去,在这里我采用的是HTML5的file API直接读取本地图片然后将其绘制到画布上;造了一个小轮子HOOC.js(详细代码并不复杂,HTML5实验室上线时有兴趣可以指教下),由此来实例化一个Canvas;

var hooc=new HOOC({

id:’canvas’,

width:500,

height:300

});

通过<input type=”file” id=”ifile” name=”ifile”/>的change事件拿到file对象(暂时不考虑多文件);

document.getElementById(‘ifile’).onchange=function(){

hooc. onfile(this.files[0],function(file){

//现在file里包含了你读取的图片的相关信息

//file={

//preimg:…,

//name:…,

//size:….,

//type:….,

//base64:….,

//width:…..,

//height:…..

//}

//现在来将其绘制到画布上吧

hooc.context2D(function(cx,cn){

//cx为2dcontext对象

//cn为canvas对象

cx.clearRect(0,0,cn.width,cn.height);

cx.drawImage(file.preimg,0,0,file.width,file.height);

//OK,图片这样就绘制上去了

//然后你可以对其进行其他操作了,比如简单的滤镜……

//好吧,现在你还需要将你处理后的图片保存下来

download.onclick=function(){

hooc. saveAsImage(file.type,file.name);

}

});

});

}

关于canvas保存为图片的方法toDataURL();在这里没有考虑IE9及以下低级浏览器的兼容,虽然有google的excanvas.js,但其实大家也清楚,只能解决部分兼容问题,大家不要太天真了,还有就是保存URLdata时IE9会报字符太长限制错误,所以这里的下载到本地,采用HTML5的下载方式a.download;并通过模拟点击事件来及时触发,直接调用就OK,不受DOM节点类型限制;部分代码如下:

saveAsImage:function(type,name){

if(navigator.userAgent.toLowerCase().indexOf(‘msie‘)!=-1){

//BSIE

return false;

}

var dataUrl=this.canvas.toDataURL(‘image/octet-stream‘);

dataUrl=dataUrl.replace(‘image/png‘,‘image/‘+type+‘‘);

var name=name.toLowerCase().lastIndexOf(‘.‘+type.toLowerCase()+‘‘)!=-1?name:(name+‘.‘+type);

var a=document.createElement(‘a‘);

a.href=dataUrl;

a.download=name;

var event=document.createEvent(‘MouseEvents‘);

event.initMouseEvent(‘click‘,true,true,document.defaultView,0,0,0,0,0,false,false,false,false,0,null)

a.dispatchEvent(event);

}

如大家所见,HTML5实验室的内容将不考虑低级IE的兼容性,全都采用HTML5相关的API来实现,我只想说,确实不错,遇见绝不错过!

HOOC.js还将陆续整理力所能及的基于Canvas处理图像的更多方法,实现一个miniPS,一方面作为对canvas学习的总结,另一方面,可以协助自己处理图片;如果有幸与君共同探讨,或对读者有所裨益,倍感荣幸;小弟不才,敬请期待!

时间: 2024-10-11 18:53:09

HTML5实验室简介之Canvas图像处理(一)的相关文章

HTML5新增核心工具——canvas

Canvas元素称得上是HTML5的核心所在,它是一个依靠JavaScript绘制华丽图像的元素. Canvas由一个可绘制地区HTML代码中的属性定义决定高度和宽度,JavaScript代码可以访问该地区,通过一套完整的绘图功能类似于其他通用二维的API,从而生成动态的图形. Canvas可以在浏览器中绘制出十分华丽的图形,比如: 当然这应该算比较高级的用法了,本菜也不会=.= Canvas一个很大的作用就是制作游戏,本文通过博主之前做的一个小游戏来从零介绍Canvas的用法,先展示下吧: O

HTML5 CSS3 专题 :canvas 实现彩票刮刮乐

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/34089553 今天给大家带来一个刮刮乐的小例子~基于HTML5 canvas的,有兴趣的可以改成android版本的,或者其他的~ 效果图: 贴一张我中500w的照片,咋办啊,怎么花呢~ 好了,下面开始原理: 1.刮奖区域两个Canvas,一个是front , 一个back ,front遮盖住下面的canvas. 2.canvas默认填充了一个矩形,将下面canvas效果图遮盖

Html5新特性 &amp;lt;canvas&amp;gt;画板画直线

 以下样例为用canvas标签画多条直线 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht

HTML5 file API加canvas实现图片前端JS压缩并上传 (转载)

一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致上传失败风险. 最最重要的体验改进点:省略了图片的再加工成本.很多网站的图片上传功能都会对图片的大小进行限制,尤其是头像上传,限制5M或者2M以内是非常常见的.然后现在的数码设备拍摄功能都非常出众,一张原始图片超过2M几乎是标配,此时如果用户想把手机或相机中的某个得意图片

canvas图像处理汇总

一.canvas的情况 canvas自从出来了之后,在前端的图像处理上面提供了各种各样的遍历,虽然很多的操作其实都是要应用到算法的,但是这个也给前端提供了很多的可能性,其中最终要的一个canvas函数(至少我认为)就是getImageData,这个函数可以提取图像每个像素的RGBA值.因为有这个函数所有才有丰富多彩的canvas图像处理. 二.预备知识  2.1 获取一个canvas对象 <canvas id="test"></canvas> <scrip

canvas图像处理

最近在慕课网看到一个canvas图像处理的教程,现在总结一下. 不多说其它了,开始说代码吧. 以下canvasA是原图的画布,canvasB是处理后的图像的画布 RGB通道过滤 RGB通道过滤 function filter(){ var imageData = contextA.getImageData(0,0,canvasA.width,canvasA.height); //Uncaught SecurityError: Failed to execute 'getImageData' on

HTML5标签canvas图像处理

摘要: canvas可以读取图片后,使用drawImage方法在画布内进行重绘.本文介绍canvas的图像处理 drawImage drawImage() 方法在画布上绘制图像.画布或视频.drawImage() 方法也能够绘制图像的某些部分,以及/或者增加或减少图像的尺寸. 语法 在画布上定位图像: context.drawImage(img,x,y); 在画布上定位图像,并规定图像的宽度和高度: context.drawImage(img,x,y,width,height); 剪切图像,并在

HTML5:简介和文档基本结构

HTML(Hypertext Markup Language,超文本标记语言)诞生于20世纪90年代初,用于指定构建网页的元素,这些元素中的大多数都用于描述网页内容,如标题.段落.列表.指向其他网页的链接等.HTML5是HTML的最新版本,它的大部分内容都可以兼容新旧浏览器,并新增了大量新的功能.HTML5还引入了原生的音频和视频播放功能.通过下面的网址可以查看HTML的最新规范: 1)HTML5:http://www.w3.org/TR/html5/ 2)HTML5.1:http://www.

HTML5新标签之Canvas

1.概述 Canvas 用于在网页展示图像,并且可以定制内容,基本上它是一个可以用JavaScript操作的位图(bitmap). Canvas API用于网页实时生成图像,JavaScript通过API来操作图像内容.这样做的优点是:减少HTTP请求数,减少下载的数据,加快网页载入时间,可以对图像进行实时处理. 使用前,首先需要建一个Canvas网页元素. <canvas id="myCanvas" width="400" height="200&