图片展示网页往往色彩繁杂,当一个网页上有多张图片的时候用户的注意力就很不容易集中,而且会造成网站整个色调风格的不可把控。

能不能把所有的预览图变成灰度图片,等用户激活某张图片的时候再上色呢?

以前,唯一的方法就是让美工做两张图,一张彩色一张黑白,费时费力。

能不能让js对图片进行一些处理呢?幸运的是,canvas就提供了图片处理的方法。

canvas+js可以让我们对图片进行像素级的操作,我们可以通过操作图像的像素实现各种图片处理效果,如模糊,马赛克,液化,调色等等。

详细代码及注释如下:

<!doctype html>
<html>
<head>
<title>Canvas图像处理demo</title>
<meta charset='utf-8' />
<script src="jQuery.js" type="text/javascript"></script>
<style>
h1{text-align:center;}
.outer{width:800px;margin:0 auto;}
img{border:0;width:200px;height:350px;margin:0;padding:0;}
</style>
</head> <body>
<h1>Canvas图像处理demo</h1>
<div class='outer'>
<img class='image' src='images/1.jpg'/>
<img class='image' src='images/2.jpg'/>
<img class='image' src='images/3.jpg'/>
<img class='image' src='images/4.jpg'/>
<img class='image' src='images/5.jpg'/>
</div>
<script>
     /*等图片加载完成后再执行(若图片没有加载完成,则不能正常进行图片处理)*/
$(window).load(function(){
       /*克隆一张原图,把当前图片变为灰度图*/
$('.image').each(function(){
$(this).css({"position":"absolute"}).wrap("<div class='img_wrapper' style='display: inline-block;position:relative;float:left;'></div>").clone().addClass('img_grayscale').css({"position":"absolute","z-index":"998","opacity":"0"}).insertBefore($(this));
$('.img_wrapper').css({'height':$(this).height(),'width':$(this).width()});
this.src=huidu(this.src);
});
       /*通过控制彩色图片的透明度模拟上色效果*/
$('.img_wrapper').mouseover(function(){
$(this).find('img:first').stop().animate({opacity:1},100);
})
$('.img_wrapper').mouseout(function(){
$(this).find('img:first').stop().animate({opacity:0},100);
});
/*
        *function
        *函数名称:huidu
        *功能:把图片转换为灰度图
        *参数:src(原图的url)
        *返回值:(转换完成后的图片url)
        */
function huidu(src){
         /*创建一个canvas*/
var canvas=document.createElement('canvas');
var ctx=canvas.getContext('2d');
var img=new Image();
img.src=src;
canvas.height=img.height;
canvas.width=img.width;
ctx.drawImage(img,0,0);
var imgdata=ctx.getImageData(0,0,canvas.width,canvas.height);var data=imgdata.data;
         /*灰度处理:求r,g,b的均值,并赋回给r,g,b*/
for(var i=0,n=data.length;i<n;i+=4){
var average=(data[i]+data[i+1]+data[i+2])/3;
data[i]=average;
data[i+1]=average;
data[i+2]=average;
}
ctx.putImageData(imgdata,0,0);
         /*返回处理之后的src*/
return canvas.toDataURL();
}
});
</script>
</body>
</html>

基于canvas图像处理的图片展示demo的更多相关文章

  1. 基于canvas图像处理的图片 灰色图像

    图片展示网页往往色彩繁杂,当一个网页上有多张图片的时候用户的注意力就很不容易集中,而且会造成网站整个色调风格的不可把控. 能不能把所有的预览图变成灰度图片,等用户激活某张图片的时候再上色呢? 以前,唯 ...

  2. OC基础之推荐一个旋转木马(跑马灯)效果的图片展示Demo

    这个旋转木马(跑马灯)效果的图片展示Demo,包括设定旋转方向,图片倒影,背景设置,旋转速度,开始结束,点击显示选中的图片,彩色的块展示等等功能 效果图:(源码下载:https://github.co ...

  3. 一款基于jquery的手风琴图片展示效果

    今天要给大家分享一款基于jquery的手风琴图片展示效果.这款图片的展示效果鼠标经过前是灰色的,当鼠标经过时图片变大且变为彩色.效果图如下: 在线预览   源码下载 实现的代码. html代码: &l ...

  4. 基于canvas的前端图片压缩

    /*common*/ /** * canvas图片压缩 * @param {[Object]} opt [配置参数] * @param {[Function]} cbk [回调函数] * @retur ...

  5. 基于HTML5 Canvas实现的图片马赛克模糊特效

    效果请点击下面网址: http://hovertree.com/texiao/html5/1.htm 一.开门见山受美国肖像画家Chuck Close的启发,此脚本通过使用HTML5 canvas元素 ...

  6. java+js实现完整的图片展示本地目录demo

    java+js实现完整的图片展示本地目录demo 最近的项目满足需要,实现通过一个前端button点击事件,流行音乐浏览下的全部图片: 思路: - 获取到所需展示图片的本地目录内全部图片的文件绝对路径 ...

  7. 基于html5鼠标悬停图片动画展示效果

    分享一款基于html5鼠标悬停图片动画展示效果.里面包含两款不同效果的html5图片展示效果.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class=" ...

  8. canvas图像处理汇总

    一.canvas的情况 canvas自从出来了之后,在前端的图像处理上面提供了各种各样的遍历,虽然很多的操作其实都是要应用到算法的,但是这个也给前端提供了很多的可能性,其中最终要的一个canvas函数 ...

  9. 基于canvas的二维码邀请函生成插件

    去年是最忙碌的一年,实在没时间写博客了,看着互联网行业中一个又一个人的倒下,奉劝大家,健康要放在首位,保重身体.好了,言归正传,这是17年的第一篇博文,话说这天又是产品同学跑过来问我说:hi,lenn ...

随机推荐

  1. C#读取XML配置文件

    DataSource.xml文件,要放在bin/debug/目录下: <?xml version="1.0" encoding="utf-8" ?> ...

  2. redis使用Java学习

    一.连接到redis服务 import redis.clients.jedis.Jedis; public class RedisJava { public static void main(Stri ...

  3. 转载Eclipse中Maven WEB工程tomcat项目添加调试

    转载地址: http://blog.csdn.net/free4294/article/details/38260581 一.建立一个maven  WEB项目 1.file->new->o ...

  4. jquery国内cdn

    推荐几个国内的jquery CDN服务地址吧: 新浪CDN,感觉很快,用的人很多,推荐使用! http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.m ...

  5. maven项目依赖被改为文件夹时如何改回lib

    如图

  6. python中的函数存入list中的实例

    最近由于接触了python这个强大的东西,在写代码时考虑到代码的扩展性,就想到了将python的函数名存入list中.有点像习惯的c/c++中的函数指针的意思. 下面上代码: # coding=utf ...

  7. 深入理解Azure自动扩展集VMSS(3)

    在实际使用过程当中,使用VMSS有一些最佳实践的建议和限制,便于你在做自动扩展设计的时候进行考虑: 关于VMSS 如果你使用的是系统镜像,一个扩展集中虚拟机数量不能超过100 无论是在ASM还是ARM ...

  8. LeetCode_Valid Palindrome

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...

  9. Keil C51编译及连接技术

    主要介绍Keil C51的预处理方法如宏定义.常用的预处理指令及文件包含指令,C51编译库的选择及代码优化原理,C51与汇编混合编程的方法与实现以及超过64KB空间的地址分页方法的C51实现. 教学目 ...

  10. Check iO:初学Python

    The end of other For language training our Robots want to learn about suffixes. In this task, you ar ...