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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTML5中,如何为图片制作放大镜效果?相关的知识,希望对你有一定的参考价值。

制作图片的放大效果我考虑到的方法是将原始图片绘制到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>

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

参考技术A 这里说说原理:制作图片的放大效果我考虑到的方法是将原始图片绘制到canvas上,然后在对canvas进行局部裁剪最后对裁剪的部分进行放大,这样就可以实现放大镜的效果。
因为版权原因,这里就不贴源码了。有兴趣的话可以私信我,我找我们ITjob的老师要源码。谢谢!

js如何制作放大效果的图片

<th><i class=""></i>车系展示图:</th>
<td>
   <i><img id = "img" src="图片.jpg"  style="width:150px;height:110px" onclick="fun()"><br></i>
   <p>点击可放大图片</p>
</td>

这是javascript部分

<script type="text/javascript">
   function fun(){
      var submitSpan = document.getElementById("img");
      submitSpan.style.width = ‘600px‘;
      submitSpan.style.height = ‘400px‘;
      submitSpan.onclick = function () {
         fun1();
      }
   }
   function fun1(){
      var submitSpan = document.getElementById("img");
      submitSpan.style.width = ‘150px‘;
      submitSpan.style.height = ‘100px‘;
      submitSpan.onclick = function () {
         fun();
      }
   }
  </script>


本文出自 “kangjunfei” 博客,转载请与作者联系!

以上是关于HTML5中,如何为图片制作放大镜效果?的主要内容,如果未能解决你的问题,请参考以下文章

HTML5Canvas 实现放大镜效果

HTML5Canvas 实现放大镜效果

js如何制作放大效果的图片

如何用CSS实现鼠标经过 图片放大的效果

HTML5 - 图片悬停放大

Matlab中如何用语句高质量保存plot出的图片?使其放大效果与figure中呈现的类似。