基于canvas图像处理的图片展示demo


图片展示网页往往色彩繁杂,当一个网页上有多张图片的时候用户的注意力就很不容易集中,而且会造成网站整个色调风格的不可把控。
能不能把所有的预览图变成灰度图片,等用户激活某张图片的时候再上色呢?
以前,唯一的方法就是让美工做两张图,一张彩色一张黑白,费时费力。
能不能让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的更多相关文章
- 基于canvas图像处理的图片 灰色图像
图片展示网页往往色彩繁杂,当一个网页上有多张图片的时候用户的注意力就很不容易集中,而且会造成网站整个色调风格的不可把控. 能不能把所有的预览图变成灰度图片,等用户激活某张图片的时候再上色呢? 以前,唯 ...
- OC基础之推荐一个旋转木马(跑马灯)效果的图片展示Demo
这个旋转木马(跑马灯)效果的图片展示Demo,包括设定旋转方向,图片倒影,背景设置,旋转速度,开始结束,点击显示选中的图片,彩色的块展示等等功能 效果图:(源码下载:https://github.co ...
- 一款基于jquery的手风琴图片展示效果
今天要给大家分享一款基于jquery的手风琴图片展示效果.这款图片的展示效果鼠标经过前是灰色的,当鼠标经过时图片变大且变为彩色.效果图如下: 在线预览 源码下载 实现的代码. html代码: &l ...
- 基于canvas的前端图片压缩
/*common*/ /** * canvas图片压缩 * @param {[Object]} opt [配置参数] * @param {[Function]} cbk [回调函数] * @retur ...
- 基于HTML5 Canvas实现的图片马赛克模糊特效
效果请点击下面网址: http://hovertree.com/texiao/html5/1.htm 一.开门见山受美国肖像画家Chuck Close的启发,此脚本通过使用HTML5 canvas元素 ...
- java+js实现完整的图片展示本地目录demo
java+js实现完整的图片展示本地目录demo 最近的项目满足需要,实现通过一个前端button点击事件,流行音乐浏览下的全部图片: 思路: - 获取到所需展示图片的本地目录内全部图片的文件绝对路径 ...
- 基于html5鼠标悬停图片动画展示效果
分享一款基于html5鼠标悬停图片动画展示效果.里面包含两款不同效果的html5图片展示效果.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=" ...
- canvas图像处理汇总
一.canvas的情况 canvas自从出来了之后,在前端的图像处理上面提供了各种各样的遍历,虽然很多的操作其实都是要应用到算法的,但是这个也给前端提供了很多的可能性,其中最终要的一个canvas函数 ...
- 基于canvas的二维码邀请函生成插件
去年是最忙碌的一年,实在没时间写博客了,看着互联网行业中一个又一个人的倒下,奉劝大家,健康要放在首位,保重身体.好了,言归正传,这是17年的第一篇博文,话说这天又是产品同学跑过来问我说:hi,lenn ...
随机推荐
- 技巧集:nginx作代理时,查看请求被转发到哪台服务器
使用Nginx代理多台服务器实行负载的时候,如何查看某一个请求被转发到哪台服务器上呢? upstream demo { server 127.0.0.1:8781; server 127.0.0.1: ...
- mysql-cluster集群原理介绍和搭建步骤(四个data/sql节点) (转)
MySQL簇概述 MySQL簇是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的簇.通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求.此外,由于每个组件有自己的内存和磁盘, ...
- C/C++中的成员函数指针声明及使用
代码: #include <iostream> using namespace std; class Test{ public: void func(){ cout<<&quo ...
- c#鼠标在控件上面,然后显示文字
先添加toolTip控件到界面 然后每个控件的属性会多一项 ToolTip 第一种:直接给里面加文字 第二种: private void pictureBox_topmost_MouseHover(o ...
- Spring AOP之异常转换
Spring-AOP之异常转换 引子 最近项目遇到了一个问题,就是说业务层向展现层需要转换成统一个异常类,并抛出异常,但是由于业务层的异常类过多,所以导致业务异常转换代码充斥着异常转换的代码,本着程序 ...
- 【android】Android检查是否已经连接到网络
ConnectivityManager con=(ConnectivityManager)getSystemService(Activity.CONNECTIVITY_SERVICE); boolea ...
- 遍历String字符串,得到出现次数最多的字母
//There is no need to explain the code right? package com.hp.test; import java.util.HashMap; import ...
- [iOS常见问题] 关于使用QQ做第三方登录的问题!
[iOS常见问题] 关于使用QQ做第三方登录的问题! 注意:QQ本身没有授权功能,所以想要使用QQ做第三方登录必须通过QQ空间来实现! 第一步:集成ShareSDK(步骤同集成分享的一样,如果已经集成 ...
- npm install 本地安装与全局安装
npm的包安装分为本地安装(local).全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已: npm install grunt # 本地安装 npm install -g gr ...
- SGU 294 He's Circles
题意:一个项链有n个珠子,每个珠子为黑色或白色.问有多少种不同的项链? 注意,n的数量十分大,因此,我们枚举i(1<=i<=n),令L=n/i,求出L的欧拉函数,则这些数和L互质,因此gc ...