【前端可视化】Canvas 下载图片添加背景色因为缩放导致比例不同问题

文章讲述了在canvas元素缩放后如何正确调整背景色的填充范围,使用globalCompositeOperation处理绘制层级,以及利用toDataURL方法生成可下载的图片数据URI,特别提到了JPEG格式的图片质量和命名问题。

比例不同是因为缩放导致的,缩放导致绘图中心发生改变,我们需要把填充的背景色的范围扩大(根据缩放比例来),同时背景色要绘制在现有画布的后面,防止重叠遮挡。

感觉一个小下载,需要注意的事项还是挺多的,记录下,希望能帮助到其他人,里面的一些 API 请参考 MDN 文档。

下面的参考代码,自己根据自己实际项目需要来修改就行。

// 下载图片
const handleDownloadImg = () => {
  const canvas = document.querySelector('canvas');
  if (!canvas) {
    ElMessage({
      message: '未找到canvas',
      type: 'warning',
    });
    return;
  }
  // 设置背景色
  const ctx = canvas.getContext('2d');
  if (ctx) {
    // 绘制层级问题 globalCompositeOperation:在现有的画布内容后面绘制新的图形
    ctx.globalCompositeOperation = 'destination-over';
    ctx.fillStyle = mapConfig.backgroundColor;
    // 获取canvas的缩放比例, 用于缩放操作,下面要还原canvas的缩放比例
    const scale = ctx.getTransform().a / 2;
    ctx.fillRect(
      -canvas.width / 2 / scale,
      -canvas.height / 2 / scale,
      canvas.width / scale,
      canvas.height / scale,
    );
  }
  // t
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值