web大作业(7)图片涂鸦功能的实现

作业要求能上传一张图片并在图片上进行b标注或绘画,可以用HTML5自带的canvas实现,首先是body部分:

<div class="paint">
        <canvas id="canvas" width="500" height="400" style="border:1px solid #c3c3c3;"></canvas>
</div>
<input accept="image/*"  type="file" id="uploadIMG"  onchange="btnUploadFile(event)"/>

首先我们要上传一张照片,并在canvas中显示,以下为js代码:

function btnUploadFile(e,type){
        var files = e.target.files;
        var file = files[0];
        if (!/\/(?:jpeg|jpg|png)/i.test(file.type)){
            return;
        }
        
        var reader = new FileReader();
        reader.onload = function() { 
            var result = this.result;  
            var img=new Image()
            img.src=result;
            var canvas = document.getElementById("canvas");
            var context = canvas.getContext("2d");
            //console.log(result)
            img.onload = function(){
                context.drawImage(img,0,0,500,400);
            }
        };
        reader.readAsDataURL(file);    
    }

然后是涂鸦功能的实现:

window.onload=function(){
        var canvas = document.getElementById("canvas");
        var context = canvas.getContext("2d");
        paint(context);
    }
    function paint(context){
        var temp = false;
        $("canvas").mousedown(function(event){
            temp=true;
            var x = e.pageX-8;
            var y = e.pageY-8;
            context.moveTo(x,y);
        })
        $("canvas").mousemove(function(e){
            var x = e.pageX-8;
            var y = e.pageY-8;
            //$("#info").html("( "+x+" , "+y+" )");
            if(temp){
                context.lineTo(x,y);
                context.stroke();
            }else{
                context.beginPath()
            }
        })
        $("canvas").mouseup(function(e){
            temp=false;
        })
    }

这里我调试了好久,发现只有当确认鼠标松开时随时beginPath,才能保证第一次松开和第二次点击拖动画出来的是两根线,否则这两根线会自动首尾相连。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值