美文网首页
Img转换为canvas、写字、该canvas正常放大缩小、保存

Img转换为canvas、写字、该canvas正常放大缩小、保存

作者: 一座被占用 | 来源:发表于2018-06-22 12:46 被阅读0次

    项目中有一个需求:实现画板的功能。提供一张图片。可以在上面写字,并且可以放大缩小。

    1.图片转换为canvas

    在render中先插入一张图片和一个canvas,给img添加src。等到src加载完成后。获取这个图片并绘制canvas(这边也可以使用new Image()方法)

    代码:

        canvas.width = img.width;

        canvas.height = img.height;

        this.ctx = canvas.getContext("2d");

        this.ctx.drawImage(img,0,0,img.width,img.height);

        $(img).remove();

    这样就把图片放到canvas中去

    2.在这个canvas上写字

    主要用到 lineTo方法技巧

    var me = this;

    this.ctx.lineWidth = 1;//笔触的粗细

    this.ctx.strokeStyle = 'red'//笔的颜色

    canvas.onmousedown = function(event){

        me.ctx.beginPath();

        me.moveTo(event.offsetX,event.offsetY);//从这里开始画

    }

    canvas.onmouseup = function(event){

        me.cxt.closePath();//结束

    }

    canvas.onmousemove = function(event){

        me.cxt.lineTo(event.offsetX,event.offsetY);//移动到

        me.cxt.stroke();//实现划线连接

    }

    3.保存canvas到本地图片

    思路:把canvas转换成base64,然后使用node的filesystem的writeFile方法把buffer写入本地

    var imgData = canvas.toDataURL("img/png");

    var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");

    var dataBuffer = new Buffer(base64Data,'base64');

    fs.writeFile("C:/.../XXX.png",dataBuffer,function(err){})

    4.缩放canvas大小是因为在这里遇到了问题。

    我期望的效果是canvas缩小状态和放大状态都是一个东西。所有东西成比例呈现。但是在开发过程中发现。直接修改canvas的width和height属性,canvas的宽高变化了,但是里面的图却没有了。

    网上查了一下,需要重新画一次。思路是先getImgData,然后再pushImgData。我照着做了一次。

    var imgData = me.ctx.getImageData(0,0,canvas.width,canvas.height);

    canvas.width  = newWidth;

    canvas.height = newHeight;

    me.ctx.putImageData(imgData.0.0)

    然后我发现,这边是可以画出原来的图的。但是呢!新画的图还是原来的大小,而不是新的宽高的图。这个肯定不是我想要的。而且putImageData方法参数也没有提供可以设置imgData宽高的方法。我试着手动修改imgData的width和height属性,也报错说是只读的。

    接着就把canvas转换成图片,把新生成的图片再画一次

    var image = new Image();

    image.src = canvas.toDataURL("image/png");

    me.ctx.drawImage(image,0,0,oldWidth,oldHeight,0,0,newWidth,newHeight);

    这个问题就得到解决了。

    知其然不知其所以然

    相关文章

      网友评论

          本文标题:Img转换为canvas、写字、该canvas正常放大缩小、保存

          本文链接:https://www.haomeiwen.com/subject/pualeftx.html