为什么在canvas上画图片比设置的尺寸大很多?

原图大小:750x1334
canvas大小: 750X1334
我要在750x1334的画布上,铺一个750x1334的图片作为背景。

代码如下:

 var image = new Image()
  image.src = '/img/background.png'
  image.onload = drawImg // 图片加载完成再执行
  function drawImg () {
context.drawImage(image, 0, 0, 750, 1334)
  }

canvas:

<canvas id='share' canvas-id='share' style='width:750px;height:1334px;'>
</canvas>

结果效果出来是这样的,左图为canvas,右图为这个原图的img作为比对,750x1334,也就是我最后想要画出来的效果
图片描述

图片拉伸了非常多,这是为什么?

阅读 6.1k
2 个回答
<canvas id='share' canvas-id='share' width="750" height="1334" style='width:750px;height:1334px;'>
</canvas>

canvas 的大小不是通过 style 设置的,这两个宽高是两码事。

看你说750x1334 应该是为了H5绘图,如果加上你的动态适配,在浏览器以模拟手机窗口打开,是一个绘制好的图片
但是你canvas标签本身是一个画布,我之前做了一个微信分享,前端绘图,我把代码贴给你,希望对你有帮助

var canvas = document.createElement('canvas');
        canvas.width = 750;
        canvas.height = 1206;
        var ctx = canvas.getContext('2d');
        var img = new Image();
        img.onload = function () {
            var img_left = new Image();

            img_left.onload = function () {
                var img_ewm = new Image();
                img_ewm.onload=function(){
                    ctx.font = "24px 黑体";
                ctx.drawImage(img, 0, 0);
                ctx.drawImage(img_left, 310, 160, 115, 115);
                ctx.drawImage(img_ewm, 310, 925, 115, 115);
                ctx.fillStyle = "#773f15";
                ctx.textAlign = 'center';
                ctx.fillText('??', 375, 138);
                //$('body').html(canvas);
                $('.imageShare').attr('src', canvas.toDataURL("image/jpeg"))
                }
                img_ewm.src='./ewm.png';
                img_ewm.crossOrigin = 'anonymous';
                
            }
            img_left.src = "./132.jpeg"
            img_left.crossOrigin = "anonymous";
        }
        img.src = './result2.jpg';
        img.crossOrigin = "anonymous";

注意 canvas 绘图,图片会有跨域问题,导致不能生成图片,所以需要配置同源

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题