canvas知识02:图片放大镜效果

效果截图:

JS代码:

<script>
    // 初始化canvas01和上下文环境
    var cav01 = document.getElementById(‘cav01‘);
    var cxt01 = cav01.getContext(‘2d‘);

    // 初始化canvas02和上下文环境
    var cav02 = document.getElementById(‘cav02‘);
    var cxt02 = cav02.getContext(‘2d‘);

    //初始化image对象和缩放比例
    var oImg = new Image();
    var scale;

    window.onload = function(){

        //设置图片路径
        oImg.src = ‘images/02.jpg‘;

        //设置主canvas的宽高
        cav01.width = 800;
        cav01.height = 500;

        oImg.onload = function(){

            //设置离屏canvas的宽高,与原始图片的宽高一致
            cav02.width = oImg.width;
            cav02.height = oImg.height;

            //初始化鼠标按下状态和设置缩放比例
            var isMouseDown = false;
            scale = cav02.width/cav01.width;

            //绘制图像到canvas,第二个canvas初始时是隐藏的
            cxt01.drawImage( oImg, 0, 0, cav01.width, cav01.height);
            cxt02.drawImage( oImg, 0, 0, cav02.width, cav02.height); 

            //鼠标按下状态
            cav01.onmousedown = function(e){

                //获取鼠标相对于canvas的坐标
                var pos = getMousePos(e.clientX,e.clientY);

                //阻止鼠标默认事件
                e.preventDefault();

                //调用绘制放大镜方法
                drawFilterImg(true,pos);

                //把isMouseDown标记设置为true;
                isMouseDown = true;
            }

            //鼠标移动状态
            cav01.onmousemove = function(e){
                //获取鼠标相对于canvas的坐标
                var pos = getMousePos(e.clientX,e.clientY);
                e.preventDefault();

                //根据isMouseDown状态,调用绘制放大镜方法
                if(isMouseDown == true ){
                    drawFilterImg(true,pos);
                }
            }

            // 鼠标抬起状态
            cav01.onmouseup = function(e){

                //获取鼠标相对于canvas的坐标
                var pos = getMousePos(e.clientX,e.clientY);
                e.preventDefault();

                //调用绘制放大镜方法
                drawFilterImg(false);

                //把isMouseDown状态设置为false
                isMouseDown = false;
            }
        }

        // 绘制放大镜方法 flag:用于判断是否开始绘制,pos:鼠标相对于canvas画布的坐标
        function drawFilterImg(flag,pos){

            //每次调用先清空canvas画布,避免出现重复图像
            cxt01.clearRect( 0, 0, cav01.width, cav01.height);
            cxt01.drawImage( oImg, 0, 0, cav01.width, cav01.height);

            //定义放大镜半径
            var r = 100;

            if(flag == true){
                //调用绘制放大区域方法
                drawFilterImgCon(pos,r);
            }
        }
        //绘制放大区域方法
        function drawFilterImgCon(pos,r){

            //大图图像上开始剪切的坐标
            var sx = pos.x*scale - r;
            var sy = pos.y*scale - r;

            //画在canvas上的坐标
            var dx = pos.x - r;
            var dy = pos.y - r;

            cxt01.save();

            cxt01.strokeStyle = ‘rgba(0,0,0,0.3)‘;
            cxt01.lineWidth = 2;

            cxt01.beginPath();
            cxt01.arc( pos.x, pos.y, r, 0 , Math.PI*2);
            cxt01.stroke();
            cxt01.clip();

            cxt01.drawImage( cav02, sx, sy, r*2, r*2, dx, dy, r*2, r*2);

            cxt01.restore();
        }

        //定义获取鼠标在canvas上位置的方法
        //x:鼠标距离窗口的x坐标,y:鼠标距离窗口的y坐标
        function getMousePos(x,y){
            var oCanPos = cav01.getBoundingClientRect();
            return {
                x: x-oCanPos.left,
                y: y-oCanPos.top
            }
        }
    }

</script>

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas图片放大镜</title>
    <style>
        body{ background-color: #333; padding-top: 60px; }
        #cav01{ display: block; margin: 0 auto; }
        #cav02{ display: none;}
    </style>
</head>
<body>
    <!-- 主canvas -->
    <canvas id="cav01" style="border:1px solid #666;"></canvas>
    <!-- 离屏canvas,用于放置放大的图片,默认状态为隐藏 -->
    <canvas id="cav02"></canvas>
</body>
</html>

来源:慕课网Canvas玩转图像处理

时间: 2024-12-28 23:51:19

canvas知识02:图片放大镜效果的相关文章

WPF设置VistualBrush的Visual属性制作图片放大镜效果

原文:WPF设置VistualBrush的Visual属性制作图片放大镜效果 效果图片: 原理:设置VistualBrush的Visual属性,利用它的Viewbox属性进行缩放. XAML代码:// Window1.xaml<Window x:Class="MagnifyingGlass.Window1"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns

图片放大镜效果

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"/> 5 <title>图片放大镜效果</title> 6 <link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css" media="all&

利用jqueryzoom实现图片放大镜效果

在你的页面中包含 jqzoom.css Html代码   <link rel="stylesheet" href="your_path/jqzoom.css" type="text/css" media="screen"> 包含 jQzoom 和 jQuery JS 代码: Html代码   <script type="text/javascript" src="your_pat

jquery图片放大镜效果制作变焦镜头图片放大查看

jquery图片放大镜效果制作变焦镜头图片放大查看 http://www.17sucai.com/pins/demoshow/8511

jQuery和CSS3打造逼真的图片放大镜效果

这是一款效果非常逼真的jQuery和CSS3超逼真的图片放大镜特效.该图片放大镜特效使用CSS3的box-shadow和border-radius实现来制作放大镜的样式,使用jQuery来获取当前鼠标的坐标系,并修改当前坐标系的背景图像. 在线演示: 下载地址:http://www.htmleaf.com/jQuery/Image-Effects/201503171533.html

Canvas + JavaScript 制作图片粒子效果

首先看一下源图和转换成粒子效果的对比图:       左侧图片为源图,右侧图片为粒子效果图.该效果是在Canvas画布上制作的.将图片制作成粒子效果相对而言是比较简单的.重点了解两个知识点即可 1:图片是通过image对象形式绘制在画布上的,然后使用Canvas的getImageData接口,获取图像的像素信息. var imageData=ctx.getImageData(x, y, width, height); 参数说明:x,y为画布上的x和y坐标 width,height为获取指定区域图

[前端练习小Demo]图片放大镜效果

最终效果展示: JS部分: window.onload=function(){ var normal = document.getElementById('normal'); var lay = document.getElementById("lay"); var bigImg = document.getElementById("bigImg"); var img = bigImg.getElementsByTagName('img')[0]; normal.o

js京东图片放大镜效果。

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>放大镜</title> <style> *{ margin: 0; padding: 0; } /* 去除图片的3px */ img { vertical-align: top; } /* 容器样式 */ .container { width:

商品图片放大镜效果

效果如下 使用步骤(非常简单): 1.引入css <link rel="stylesheet" href="magiczoom/MagicZoom.css"/> 2.引入js  <script src="magiczoom.js" type="text/javascript"></script> 3.应用到标签中 <body> <a href="201042112