首页

文章

HTML5中,如何为图片制作放大镜效果?

发布网友 发布时间:2022-02-25 10:04

我来回答

2个回答

热心网友 时间:2022-02-25 11:33

制作图片的放大效果我考虑到的方法是将原始图片绘制到canvas上,然后在对canvas进行局部裁剪最后对裁剪的部分进行放大,这样就可以实现放大镜的效果。

这里我给出一个实现这个想法的示例。该示例实际上就是运用HTML5 canvas中对画布进行裁剪与保存画布状态的相关知识实现的。

上面是给出示例的效果图。这是不是你想要的放大镜效果呢?

下面我们来看下示例代码:在这个示例中当你点击图片时图片就会出现上图效果,再一次点击时就变成原始图片了。

<!DOCTYPE html>

<html>

  <head>

    <meta charset="utf-8">

    <title>放大镜</title>

<!—HTML代码设计:一个简单的canvas元素-->  

</head>

  <body>

      <div id="result-stub" class="well hidden">

            <canvas id="canvas" width="345" height="345">

                <p>你的浏览器不支持canvas元素</p>

            </canvas>

      </div>

    <script>

window.onload=function() {

    //获取canvas对象以及图片对象

         var

           canvas = document.getElementById('canvas'),

           img = new Image(),

           context = null,

           dataUrl = null,

//设置一个标记,该标记的作用是控制我们点击canvas时放大镜效果的消失和出现

           isMagnified = false,

 

 

 

//init函数只要是在图片加载时绘制出图形

  init = function() {

      img.onload = function() {

//绘制原始图片                            

  context.drawImage(img, 0, 0);

       //将图片信息转化为二进制信息或者URL信息存储在dataUrl中方便后面调用

      dataUrl = canvas.toDataURL();

                        }

       img.src = 'fist-pump-baby.jpg';

       //设置标记值

       isMagnified = false;

        },

       //magnify函数的作用是绘制具有放大镜效果的图形        

         magnify = function() {

            //保存当前画布的绘制状态即画布绘制原始图片的状态。方便我们在后面恢复到绘制原始图片的状态

              context.save();

//因为放大镜的圆圈和把手是通过canvas绘制的这里设置了一些绘制把手和圆圈的样式属性。

              context.lineWidth = 10;// 线条宽度

              context.shadowColor = '#000';// 阴影的颜色黑色

              context.shadowBlur = 15;// 模糊级别为15

              context.shadowOffsetX = 5;// 形状与阴影的水平距离5

              context.shadowOffsetY = 5;// 形状与阴影的垂直距离5

//保存画布当前状态即我们设置阴影属性后的状态方便后面使用

                        context.save();  

//绘制出放大镜把手的图形                      

context.beginPath();

                        context.moveTo(230, 230);

                        context.lineCap = 'round';

                        context.lineWidth = 30;

                        context.lineTo(285, 285);

                        context.stroke();

//对图片进行裁剪,裁剪出的图形是一个圆形。

                        context.beginPath();

 

                        context.arc(

                                    150,

                                    150,

                                    115,

                                    0,

                                    Math.PI * 2,

                                    true);

 

                        context.clip();

//创建一个新的Image对象,这个Image对象的图片资源是前面存储在dataUrl中的图片资源。所以这个Image对象和之前初始化的Image对象是完全一样的。

                        var magnified = new Image();

                   magnified.src = dataUrl;

//对Image对象进行放大1.5倍,并进行绘制。注意此时的画布状态时裁剪为一个圆形的状态,所以这里绘制的也仅仅是图片中的一个圆形区域。这里为了绘制出图片中娃娃的脸设置了绘制的图片有一定的偏移量。

                        context.scale(1.5, 1.5);

                        context.drawImage(img, -40, -40);

//调用restore()函数将画布状态恢复到绘制把放大镜把手时的状态,即具有阴影属性

                        context.restore();

//绘制放大镜的圆圈,即绘制刚刚我们裁剪出来图片的边框。这样刚刚裁剪出来的圆形图形就会正好处于放大镜的圆圈中。

                        context.arc(

                                    150,

                                    150,

                                    115,

                                    0,

                                    Math.PI * 2,

                                    true);

                        context.stroke();

//重置画布,将画布恢复到绘制元素图片的状态,以方便绘制出放大效果后,再次点击是绘制原始图片。

                        context.restore();

//设置标记值,实现点击后放大效果消失。

                        isMagnified = true;

                    };

 

//加载初始化代码,即当运行页面时会在页面绘制出一个原始图像

                    init();

               //监听画布的点击事件,当点击页面的图像时会根据标记的值来进行判断是否对画布进行方大处理                    

$('canvas').click(function() {

                        if (isMagnified) {

                            init();//绘制原始图像

                        }

                        else {

                            magnify();//绘制放大的图像

                        }

                    });

       }

    </script>

    <script src="jquery.js"></script>

  </body>

</html>

对于这些知识在一个叫秒秒学的教程网站上有相关的学习资料,有兴趣的可以自己去看看,希望对你有帮助。

热心网友 时间:2022-02-25 12:51

这里说说原理:制作图片的放大效果我考虑到的方法是将原始图片绘制到canvas上,然后在对canvas进行局部裁剪最后对裁剪的部分进行放大,这样就可以实现放大镜的效果。
因为版权原因,这里就不贴源码了。有兴趣的话可以私信我,我找我们ITjob的老师要源码。谢谢!
抖音弹幕怎么关掉?怎么关闭抖音弹幕? 惠普LaserJet P3005D是否支持B5纸的双面打印? word打印出图片总是缺一部分怎么办-word打印图片不完整怎么解决_百度... 理想one哪里产的车辆? 抚州抚州ONE在哪里? one地址在哪里? 如何在图片上写字(如何在图片上添加文字) 网商贷为什么钱没到账 高级经济师职称怎么评 高级经济师需要评审吗 赋权增能理论? 想要进移动公司上班,需要什么的基本条件啊 如何取消淘宝红包 网联客app最新版怎么注册 DN65室内消防栓有什么特点 泌尿道感染影像学检查 尿常规可以检查泌尿系感染吗 12306铁路儿童票怎么购买 儿童票购买方法介绍 12306如何申报免费乘车儿童车票 申报免费乘车儿童车票方法介绍_百度... 手机删除了微信好友还能在电脑上看到吗 打印机显示准备就绪就是不能打印问题 打印机显示就绪但无法打印如何解决_打印机显示就绪但无法打印怎么办 脚泡水多腐烂了怎么治? ...design. 学校说我已经被short-listed了,要对我进行一..._百度知... 华为怎么看热度 2023年2月7日五行穿衣搭配 实时监控锂离子脱嵌过程 锂离子电池原理解构 哪些房屋租赁合同属于无效范畴 居民楼房屋租赁合同 个人房屋出租合同有法律效力吗 房屋租赁都有哪些书 如何使用iPhone手机进行录屏操作简单教程帮你轻松学会录屏让你的操 ... 在温州苍南县的各社区关于农村老房新建,需要哪些手续? 温州宅基地申请条件 哈尔滨会展的CGV哪个厅是情侣厅?看了所有厅,感觉没有情侣座,但是选票上 ... qq黄钻怎样充值? 中韩合资沈阳新生活集团西安分布在干什么? 求证:根号下m^2+n^2+根号下n^2+p^2+根号下p^2+m^2大于等于根号2(m... ...n满足m²+2n+n(根号2)=17-4(根号2),求m+n的平方根 设m、为有理数且 m^2+2n+n倍根号2=17-4倍根号2 求m+n的平方根 为什么m^2+n^2=1,可以得出 m+n=2分之根号2 ...根号2m+1 +3n-2的绝对值等于零,求m的平方+n的平方的平方根 已知m和n是实数,且√2m+1 + |3n-2|=0,求m⊃2;+n⊃2;的平方根 ...n 满足m(2次方)+2n+n(根号(2))=17-4(根号(2)),求m+n的平方根... 有一条数学计算题,急,关于求最值的!根号<M平方加N平方>,求最小值 根号(m^2+n^2)^2怎么算 电脑docx怎么转换成word文档电脑上docx格式文件转换方法 电脑白屏是怎么回事啊。??? 电脑开机花屏渐渐地白屏了显示器突然白屏花屏的原因及解决方法_百度知 ... 爱奇艺的那个自动续费怎么取消啊 PS放大镜效果怎么做? PS里面,放大镜效果怎么做?怎么做放大镜效果? 什么视频软件可以让视频中的人全程打上马赛克,然后又要怎么弄,请指教 我现在只有个绘声绘影 华为手机删除多余桌面 华为手机怎么删除桌面 微信群怎么设置群号 微信群里完成了群主发布的群代办是什么意思? 群代办设置是什么? 抖音互关怎么有人看到在线有些看不到 抖音怎么知道好友在线没有 wifi正常 台式电脑连不上网怎么办 文件被删除且回收站清空,怎么恢复 如何WIN7中恢复被删除的文件,在回收站清空的状态下, 腾讯视频会议软件能上传PDF文件吗? 微信被扫码付款设密码 微信建群教程 邮政快递客服电话24小时人工服务怎么连接不上 中国邮政ems物流人工客服电话 中国邮政ems客服电话人工服务 微信朋友验证多长时间会过期 怎么把QQ空间设置成简洁版模式 怎么样把QQ空间主页设置成精简模式? 怎么打外国人名中的那个点? 外国人名中间有一圆点,请教这一圆点如何打? 怎样在打字的时候加入外国人名中间的点? 怎样打外国人名中的点? 淘宝网怎么退保证金 怎么清除图片中不想要的部分 如何将图片中不要的部分去掉 怎样把图片不要的部分去掉 excel表格批量求和 ps如何删除图片不要的部分 Excel求和快速方法 photoshop如何去掉图片里的一部分不想要的图片 怎么用ps9.0把图片中间不需要的部分删除 如何修图去掉图像中不要的部分 photoshop中怎样删除图片中不要的图片 淘宝有运费险如何退货 PS怎么把图片的一部分去掉 一直播如何直播自己电脑的桌面?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com