js实现微信朋友圈模糊图片功能
本人第一次写文章 ,写的不好大家就凑合着看吧。
界面的简单效果。

主要html如下
<div id="content">
<!--模糊图片-->
<img id="blur" src="data:image/p_001.jpg">
<!--使用canvas绘制图片-->
<canvas id="canvas"></canvas>
<a href="javascript:reset()" rel="external nofollow" class="button" id="button-reset">查看</a>
<a href="javascript:kan()" rel="external nofollow" class="button" id="button-show">立即看全图</a>
</div>
主要的js代码如下
- var canWidth = window.innerWidth;
- var canHeight = window.innerHeight;
- var canvas = document.getElementById("canvas");
- var ctx = canvas.getContext("2d");
- canvas.width = canWidth;
- canvas.height = canHeight;
- var img = new Image();
- img.src = "image/p_001.jpg";
- var radius = 50;
- var leftMargin = 0,
- topMargin = 0;
- img.onload = function() {
- //初始化父容器的宽高使窗口与canvas宽高相同
- $("#content").css({
- "width": canvas.width + "px",
- "height": canvas.height + "px"
- });
- //模糊图片与canva中绘制的图片(隐藏的清楚图片)宽高相同,别忘加px,否则计算出来的只是个值,不带px
- $("#blur").css("width", img.width + "px");
- $("#blur").css("height", img.height + "px");
- //左边距:(图片宽高 - canvas宽高) / 2;等于一边的边距宽高
- leftMargin = (img.width - canvas.width) / 2;
- topMargin = (img.height - canvas.height) / 2;
- //模糊图片的上边距与左边距
- $("#blur").css("top", String(-topMargin) + "px");
- $("#blur").css("left", String(-leftMargin) + "px");
- initCanvas();
- }
- function initCanvas() {
- var theleft = leftMargin < 0 ? -leftMargin : 0;
- var thetop = topMargin < 0 ? -topMargin : 0;
- //创建圆
- region = {
- x: Math.random() * (canvas.width - 2 * radius - 2 * theleft) + radius + theleft,
- y: Math.random() * (canvas.height - 2 * radius - 2 * thetop) + radius + thetop,
- r: radius
- };
- draw(img, region);
- }
- function draw(img) {
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.save();
- setRegion(region);
- /*绘制清楚图片,如leftMargin<0那么取0,
- 图片宽度与canvas宽度哪个最小取哪个值*/
- ctx.drawImage(img, Math.max(leftMargin, 0), Math.max(topMargin, 0),
- Math.min(canvas.width, img.width), Math.min(canvas.height, img.height),
- leftMargin < 0 ? -leftMargin : 0, topMargin < 0 ? -topMargin : 0,
- Math.min(canvas.width, img.width), Math.min(canvas.height, img.height));
- ctx.restore();
- }
- function setRegion(region) {
- ctx.beginPath();
- ctx.arc(region.x, region.y, region.r, 0, Math.PI * 2, false);
- //进行裁减圆
- ctx.clip();
- }
- function reset() {
- initCanvas();
- }
- function show() {
- var animation = setInterval(function() {
- region.r += 20;
- if (region.r > Math.max(canvas.width, canvas.height)) {
- clearInterval(animation);
- }
- draw(img, region);
- }, 30);
- }
- function kan() {
- var name = prompt('口令:5201314', '');
- if (name == '5201314') {
- show();
- } else {
- alert('输入口令有误,请重新输入!');
- }
- }
var canWidth = window.innerWidth;var canHeight = window.innerHeight;var canvas = document.getElementById("canvas");var ctx = canvas.getContext("2d");canvas.width = canWidth;canvas.height = canHeight;var img = new Image();img.src = "image/p_001.jpg";var radius = 50;var leftMargin = 0,topMargin = 0;img.onload = function() {//初始化父容器的宽高使窗口与canvas宽高相同$("#content").css({"width": canvas.width + "px","height": canvas.height + "px"});//模糊图片与canva中绘制的图片(隐藏的清楚图片)宽高相同,别忘加px,否则计算出来的只是个值,不带px$("#blur").css("width", img.width + "px");$("#blur").css("height", img.height + "px");//左边距:(图片宽高 - canvas宽高) / 2;等于一边的边距宽高leftMargin = (img.width - canvas.width) / 2;topMargin = (img.height - canvas.height) / 2;//模糊图片的上边距与左边距$("#blur").css("top", String(-topMargin) + "px");$("#blur").css("left", String(-leftMargin) + "px");initCanvas();}
function initCanvas() {var theleft = leftMargin < 0 ? -leftMargin : 0;var thetop = topMargin < 0 ? -topMargin : 0;//创建圆region = {x: Math.random() * (canvas.width - 2 * radius - 2 * theleft) + radius + theleft,y: Math.random() * (canvas.height - 2 * radius - 2 * thetop) + radius + thetop,r: radius};draw(img, region);}
function draw(img) {ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.save();setRegion(region);/*绘制清楚图片,如leftMargin<0那么取0,图片宽度与canvas宽度哪个最小取哪个值*/ctx.drawImage(img, Math.max(leftMargin, 0), Math.max(topMargin, 0),Math.min(canvas.width, img.width), Math.min(canvas.height, img.height),leftMargin < 0 ? -leftMargin : 0, topMargin < 0 ? -topMargin : 0,Math.min(canvas.width, img.width), Math.min(canvas.height, img.height));ctx.restore();}
function setRegion(region) {ctx.beginPath();ctx.arc(region.x, region.y, region.r, 0, Math.PI * 2, false);//进行裁减圆ctx.clip();}
function reset() {initCanvas();}
function show() {var animation = setInterval(function() {region.r += 20;if (region.r > Math.max(canvas.width, canvas.height)) {clearInterval(animation);}draw(img, region);}, 30);}function kan() {var name = prompt('口令:5201314', '');if (name == '5201314') {show();} else {alert('输入口令有误,请重新输入!');}}
js实现微信朋友圈模糊图片功能的更多相关文章
- Android 仿微信朋友圈发动态功能(相册图片多选)
代码分享 代码名称: 仿微信朋友圈发动态功能(相册图片多选) 代码描述: 仿微信朋友圈发动态功能(相册图片多选) 代码托管地址: http://www.apkbus.com/android-15276 ...
- Android 仿微信朋友圈添加图片
github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...
- Android 仿微信朋友圈发表图片拖拽和删除功能
朋友圈实现原理 我们使用 Android Device Monitor 来分析朋友圈发布图片的界面实现原理.如果需要分析其他应用的界面实现也是采用这种方法哦. 打开 Android Device Mo ...
- React Native(九)——实现仿微信朋友圈发表动态功能
好像很久都没写博客了,罪过罪过~ 许是因为刚接触App有点生疏不得窍门吧,这个月还没有更新过文章.小个把月下来,还是觉得应该边学边总结,这样才能像大神靠近(最近刚接触同业的大牛级人物,还是从中学到了很 ...
- iOS - 仿微信朋友圈视频剪切功能
分析需求 我们先看一看微信的界面 微信效果图 1.页面下部拖动左边和右边的白色竖条控制剪切视频的开始和结束时间,预览界面跟随拖动位置跳到视频相应帧画面,控制视频长度最长15秒,最短5秒 2.拖动下部图 ...
- Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。
转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...
- ionic 实现微信朋友圈分享的完整开发流程
最近开始要着手负责开发ionic的项目了,一直很好奇想实现一个微信朋友圈分享的功能,所以我就网上找了找文章来练手实现,果不其然,找到了几篇,但是发现它们的流程都不太详细,清楚,直接,还有不少坑. 今天 ...
- 微信朋友圈评论/回复/cell/键盘谈起
微信朋友圈评论功能的细节考虑及实现 微信朋友圈回复tableview iOS 实现微信朋友圈评论回复功能(一)
- 实现手机网页调起原生微信朋友圈分享的工具nativeShare.js
http://www.liaoxiansheng.cn/?p=294 我们知道现在我们无法直接通过js直接跳转到微信和QQ等软件进行分享,但是现在像UC浏览器和QQ浏览器这样的主流浏览器自带一个分享工 ...
随机推荐
- 团队作业8——第二次项目冲刺(Beta阶段)Day7——5.26
展开圆桌式会议: 会议内容:1.汇总BETA阶段的成果.2.针对BETA阶段的大家的获得的收获进行了讨论.3.对整个团队项目的过程进行了总结.每个人的工作分配: 队员 今日任务 贡献比 林燕 做最后测 ...
- 【Alpha】 第七次Daily Scrum Meeting
一.本次会议为第七次meeting会议 二.时间:9:37AM-9:50AM 地点:禹州三楼 三.会议站立式照片 四.今日任务 成员 昨日任务 今日任务 林清青 学习并了解微信程序相关方面知识,为小组 ...
- 团队作业4——第一次项目冲刺(Alpha版本)6th day
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 24点的游戏输入是点击我们给的图片然后会输入相应的数字,之前的所做的出 现了一点问题,在把数字删掉重新输入就不行,这个问题仍然 ...
- 201521123093 java 第二周学习总结
201521123093 <java程序设计> 第二周学习总结 一.第二周学习总结 答:(1)关于进一步使用码云管理代码,本周才真正学会了如何将Eclipse里的代码上传到码云中,并且能够 ...
- 201521123061 《Java程序设计》第一周学习总结
1.本周学习总结 (1) Java的来历与版本演进 最早是Sun公司绿色项目Green Project 中所撰写的Strar7应用程序的程序语言: (2)Java根据应用领域分为三大平台:Java S ...
- 201521123008《Java程序设计》第1周学习总结
本周学习总结 了解了JAVA:jdk:jre:jvm等 C语音与JAVA的部分区别: C语言全面向过程,java面向对象: C语言的代码不能跨平台,java的代码可以跨平台: C语言有指针,java没 ...
- Hyperledger Fabric 1.0 从零开始(一)——吐槽
在HyperLedger/Fabric发布0.6的时候,公司就已经安排了一个团队研究这一块,后来也请IBM的专家组过来培训了一批人,不幸的是,这批人后来全走了,然后没过多久1.0就发布了.自从2017 ...
- js的原型
在讲js的原型之前,必须先了解下Object和Function. Object和Function都作为JS的自带函数,Object继承自己,Funtion继承自己,Object和Function互相是 ...
- 如何定制 Calico 的 IP 池?- 每天5分钟玩转 Docker 容器技术(71)
在前面的小节中,我们没有特别配置,calico 会为自动为网络分配 subnet,当然我们也可以定制. 首先定义一个 IP Pool,比如: cat << EOF | calicoctl ...
- 程序编译没错,运行报错:无法定位程序输入点GT_BufLaserFollowRatio(这是函数)于动态链接库GTS.DLL上
:DLL里面没有导出该函数 :DLL没放进DEBUGS文件夹 (当时的情况是这个)