经常可以在网上或者电视上看到被马赛克模糊的图片或者视频,今天我们要利用HTML5 Canvas技术来实现图片的马赛克模糊效果。在演示中我们可以拖动滑竿来设置马赛克模糊的程度,你可以在不同的值下观察图片被马赛克后的效果。HTML5的确非常强大。

HTML代码如下

<div class="thumb"><img src="img/1.jpg" id="dolly1" /><img src="img/2.jpg" id="dolly2" /><img src="img/3.jpg" id="dolly3" />
</div>

定义了一个滑竿和3张待模糊的图片。

JavaScript代码如下

/*!* Close Pixelate v2.0.00 beta* http://desandro.com/resources/close-pixelate/* * Developed by* - David DeSandro  http://desandro.com* - John Schulz  http://twitter.com/jfsiii* * Licensed under MIT license*//*jshint asi: true, browser: true, eqeqeq: true, forin: false, immed: false, newcap: true, noempty: true, strict: true, undef: true */( function( window, undefined ) {//
'use strict';// util vars
var TWO_PI = Math.PI * 2
var QUARTER_PI = Math.PI * 0.25// utility functions
function isArray( obj ) {return Object.prototype.toString.call( obj ) === "[object Array]"
}function isObject( obj ) {return Object.prototype.toString.call( obj ) === "[object Object]"
}var console = window.console// check for canvas support
var canvas = document.createElement('canvas')
var isCanvasSupported = canvas.getContext && canvas.getContext('2d')// don't proceed if canvas is no supported
if ( !isCanvasSupported ) {return
}function ClosePixelation( img, options ) {this.img = img// creat canvasvar canvas = this.canvas = document.createElement('canvas')this.ctx = canvas.getContext('2d')// copy attributes from img to canvascanvas.className = img.classNamecanvas.id = img.idthis.render( options )// replace image with canvasimg.parentNode.replaceChild( canvas, img )}ClosePixelation.prototype.render = function( options ) {this.options = options// set sizevar w = this.width = this.canvas.width = this.img.widthvar h = this.height = this.canvas.height = this.img.height// draw image on canvasthis.ctx.drawImage( this.img, 0, 0 )// get imageDatatry {this.imgData = this.ctx.getImageData( 0, 0, w, h ).data} catch ( error ) {if ( console ) {console.error( error )}return}this.ctx.clearRect( 0, 0, w, h )for ( var i=0, len = options.length; i < len; i++ ) {this.renderClosePixels( options[i] )}}ClosePixelation.prototype.renderClosePixels = function( opts ) {var w = this.widthvar h = this.heightvar ctx = this.ctxvar imgData = this.imgData// option defaultsvar res = opts.resolution || 16var size = opts.size || resvar alpha = opts.alpha || 1var offset = opts.offset || 0var offsetX = 0var offsetY = 0var cols = w / res + 1var rows = h / res + 1var halfSize = size / 2var diamondSize = size / Math.SQRT2var halfDiamondSize = diamondSize / 2if ( isObject( offset ) ){ offsetX = offset.x || 0offsetY = offset.y || 0} else if ( isArray( offset) ){offsetX = offset[0] || 0offsetY = offset[1] || 0} else {offsetX = offsetY = offset}var row, col, x, y, pixelY, pixelX, pixelIndex, red, green, blue, pixelAlphafor ( row = 0; row < rows; row++ ) {y = ( row - 0.5 ) * res + offsetY// normalize y so shapes around edges get colorpixelY = Math.max( Math.min( y, h-1), 0)for ( col = 0; col < cols; col++ ) {x = ( col - 0.5 ) * res + offsetX// normalize y so shapes around edges get colorpixelX = Math.max( Math.min( x, w-1), 0)pixelIndex = ( pixelX + pixelY * w ) * 4red   = imgData[ pixelIndex + 0 ]green = imgData[ pixelIndex + 1 ]blue  = imgData[ pixelIndex + 2 ]pixelAlpha = alpha * ( imgData[ pixelIndex + 3 ] / 255)ctx.fillStyle = 'rgba(' + red +','+ green +','+ blue +','+ pixelAlpha + ')'switch ( opts.shape ) {case 'circle' :ctx.beginPath()ctx.arc ( x, y, halfSize, 0, TWO_PI, true )ctx.fill()ctx.closePath()breakcase 'diamond' :ctx.save()ctx.translate( x, y )ctx.rotate( QUARTER_PI )ctx.fillRect( -halfDiamondSize, -halfDiamondSize, diamondSize, diamondSize )ctx.restore()breakdefault :// squarectx.fillRect( x - halfSize, y - halfSize, size, size )} // switch} // col} // row}// enable img.closePixelate
HTMLImageElement.prototype.closePixelate = function ( options ) {return new ClosePixelation( this, options )
}// put in global namespace
window.ClosePixelation = ClosePixelation})( window );

以上这个JS文件是马赛克模糊效果的具体实现。

下面是页面上调用的JS代码:

var dolly1 = document.getElementById('dolly1')var dolly2 = document.getElementById('dolly2')var dolly3 = document.getElementById('dolly3')var pixelOpts = [ { resolution: 8 } ]var pixelDolly1 = dolly1.closePixelate( pixelOpts )var pixelDolly2 = dolly2.closePixelate( pixelOpts )var pixelDolly3 = dolly3.closePixelate( pixelOpts )var range = document.getElementById('range')var output = document.getElementById('output')range.addEventListener( 'change', function( event ) {var res = parseInt( event.target.value, 10 )res = Math.floor( res / 2 ) * 2res = Math.max( 4, Math.min( 100, res ) )output.textContent = res// console.log( res );pixelOpts = [ { resolution: res } ]pixelDolly1.render( pixelOpts )pixelDolly2.render( pixelOpts )pixelDolly3.render( pixelOpts )}, false )

以上就是实现这款HTML5 Canvas图片马赛克模糊动画的全部过程。

来源:http://www.html5tricks.com/html5-canvas-image-mosaics.html     
来个实例:http://qmzg.qq.com/cp/a20150604qmzg/

HTML5 Canvas图片马赛克模糊动画相关推荐

  1. canvas 实现图片局部模糊_HTML5 Canvas图片马赛克模糊动画

    本文作者html5tricks,转载请注明出处 经常可以在网上或者电视上看到被马赛克模糊的图片或者视频,今天我们要利用 HTML代码如下 Change pixel resolution 32 定义了一 ...

  2. HTML5 canvas生成图片马赛克特效插件

    HTML5 canvas生成图片马赛克特效插件 简要教程 这是一款使用html5 canvas来将图片制作成马赛克效果的js插件.该插件的灵感来自于美国肖像画家Chuck Close.已经有人使用这个 ...

  3. 《HTML5 Canvas核心技术 图形、动画与游戏开发》 读书笔记

    <HTML5 Canvas核心技术 图形.动画与游戏开发> 读书笔记 文章目录 <HTML5 Canvas核心技术 图形.动画与游戏开发> 读书笔记 第1章 基础知识 第2章 ...

  4. 如何把HTML转换成动图,html5实现图片转圈的动画效果——让页面动起来

    1.先瞧瞧效果: 2.代码是这样的: @mixin ani-btnRotate{ @keyframes btnRotate{ from{transform: rotateZ(0);} to{trans ...

  5. HTML5 canvas绘制雪花飘落动画(需求分析、知识点、程序编写分布详解)

    HTML5 canvas绘制雪花飘落动画(需求分析.知识点.程序编写分布详解) 原文:HTML5 canvas绘制雪花飘落动画(需求分析.知识点.程序编写分布详解) 看到网上很多展示html5雪花飞动 ...

  6. 照片转换为动画 html5,如何使用html5让图片转圈的动画效果

    如何使用html5让图片转圈的动画效果 发布时间:2020-10-26 09:33:22 来源:亿速云 阅读:78 作者:小新 如何使用html5让图片转圈的动画效果?这个问题可能是我们日常学习或工作 ...

  7. html5 canvas时光隧道3D粒子动画js特效

    下载地址 html5 canvas时光隧道3D粒子动画特效是一款非常酷炫的3D粒子时光穿梭视觉冲击动画特效. dd:

  8. html画布敲碎的视频,html5 canvas碎纸屑空中飘落动画特效

    特效描述:html5 canvas碎纸屑 空中飘落动画特效.canvas绘制空中飘落的纸屑动画特效. 代码结构 1. HTML代码 "use strict"; var _creat ...

  9. html5 雨滴效果,html5 canvas下雨滴掉落动画特效

    特效描述:html5 canvas 雨滴掉落动画 动画特效.html5 canvas绘制下雨场景动画.雨滴动画. 代码结构 1. 引入JS 2. HTML代码 // TO DO // Remove r ...

最新文章

  1. idea dubbo jar error:cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明...
  2. java正立三角形_JAVA 打印三角形
  3. ML之MLiR:利用多元线性回归法,从大量数据(csv文件)中提取五个因变量(输入运输任务总里程数、运输次数、三种不同的车型,预测需要花费的小时数)来预测一个自变量
  4. Spring整合的quartz任务调度的实现方式
  5. redis分布式缓存php,基于redis分布式缓存实现
  6. 研发协同平台持续交付2.0架构演进
  7. facade 门面 php,php设计模式之门面(Facade)模式
  8. java操作mysql临时表_Java开发网 - 系统临时表使用问题
  9. JS or C#?不存在的脚本之争
  10. 【转】Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码
  11. VIM设置-发现VIM的美
  12. 改写自SqlHelper的SqliteHelper
  13. 洛谷P5170 【模板】类欧几里得算法(数论)
  14. AI智能识别盒 智能识别垃圾分类
  15. 树莓派安装MPlayer播放器
  16. 盘点阿里巴巴 15 款开发者工具 侵删
  17. 让你的代码只做一件事情
  18. java中的instance_Java基础之Class类与instance关键字
  19. Win7 中IIS配置
  20. 中国民航飞行学院人事薪资管理系统实践案例

热门文章

  1. 数据结构栈(顺序栈、链栈、插入push、删除pop)、队(循环队,链队、入队push,出队pop)知识点梳理
  2. 微软平板电脑论坛:http://www.mspad.org:MSPAD-微软平板电脑-Surface 平板-论坛 正式上线!
  3. scaleType详解
  4. linux ssh连接交换机_如何配置交换机SSH远程登录
  5. android10系统手机获取IMSI报错:The user 10116 does not meet the requirements to access device identifiers
  6. ubuntu 下命令行播放器mplayer 使用详解
  7. CUDA PYTHON 并行计算基础
  8. 【Proteus仿真】51单片机+LCD1602驱动模板
  9. 一个vue组件完成的音乐播放器
  10. SpringBoot+Vue项目启动