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

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

时间:2023-06-29 09:12:16浏览次数:34  
标签:Canvas scale const 缩放 ctx canvas 背景色

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

感觉一个小下载,需要注意的事项还是挺多的,记录下,希望能帮助到其他人,里面的一些 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,
    );
  }
  // toDataURL() 方法返回一个包含图片展示的 data URI 。可以使用 type 参数其类型,默认为 PNG 格式。
  // jpeg 格式支持设置图片质量,并且背景有颜色
  const img = canvas.toDataURL('image/jpeg', 1);
  const a = document.createElement('a');
  a.href = img;
  a.download = `${props.project?.name || projectStore.project.name}${
    props.subTitle || ''
  }.png`;
  a.click();
  // 下载完后还原globalCompositeOperation(根据项目需要来,我这里是图谱,部分组件会因为这个属性改变样式)
  if (ctx) {
    ctx.globalCompositeOperation = 'source-over';
  }
};

标签:Canvas,scale,const,缩放,ctx,canvas,背景色
From: https://www.cnblogs.com/wx980416/p/17513112.html

相关文章

  • 在element-ui视频上传使用canvas截取视频帧数,并且转为视频封面。
    <el-upload:http-request="getFile"//自定义上传action:on-change="handleFileChange"//监听文件上传ref="upload"accept="video/*"//定义格式为视频><el-butto......
  • JS canvas 标签制作色相球
    <!DOCTYPEhtml><html><head><metacharset="UTF-8"/><title>JScanvas标签制作色相球</title></head><body><canvas></canvas><scripttype="text/javascript">varcanvas,ctx,ma......
  • 【HarmonyOS】低代码项目中设置拖拽组件背景色透明度问题
    【关键字】HarmonyOS、低代码开发、拖拽组件、背景色透明度【问题描述】使用拖拽式组件开发HarmonyOS项目时,想给组件设置背景色透明度,有如下几个问题:1)使用DevEcoStudio自带的颜色选择器,无法设置透明度,只能手动输入2)在子模块library中给组件手动输入#ff000000格式背景色,在主模块ent......
  • IE7下图片缩放失真fix
    此篇主要是介绍ie7下图片被拉伸导致的锯齿 解决方法: 增加这个样式规则  -ms-interpolation-mode:bicubic语法: -ms-interpolation-mode  nearest-neighbor   ------usenearestneighborinterpolationmodebicubic            ------use......
  • html2canvas使用记录
    1.生成图片有白边/黑边设置backgroundColor:#ffffff2.本地生成图片没有白边/黑边,打包后生成图片有白边/黑边查看打印容器/父级是否有定位,宽度过大/过小等,去掉定位或限宽3.生成图片模糊设置scale参数4.文字错位设置字体5.外链图片不显示设置useCors:true,同时将打印区的......
  • html to canvas to images
    html2canvas是一种将HTML元素转换为canvas元素的JavaScript库,它的原理是通过遍历HTML元素,将元素的内容绘制到offscreen的canvas上,最终通过canvas的toDataURL方法将其转换成图片格式。具体的实现流程如下:获取需要转换的HTML元素创建一个offscreen的canva......
  • 如何用canvas实现一个富文本编辑器
    富文本编辑器相信大家都用过,相关的开源项目也很多,虽然具体的实现不一样,但是大部分都是使用DOM实现的,但其实还有一种实现方式,那就是使用HTML5的canvas,本文会带大家使用canvas简单实现一个类似Word的富文本编辑器,话不多说,开始吧。最终效果抢先看:https://wanglin2.github.io/canvas-e......
  • canvas用法
    感谢原文:****点击跳转原文:canvas详细教程原文canvas是什么?简单来说,``是HTML5中的标签,它是一个容器,可以使用JS在其中绘制图形或文字。MDN:``是一个可以使用脚本(通常为JavaScript)来绘制图形的HTML元素。例如,它可以用于绘制图表、制作图片构图或者制作简单的动画。主要聚......
  • shell脚本字体颜色和背景色
      !/bin/bash##下面是字体输出颜色及终端格式控制#字体色范围:30-37echo-e"\033[30m黑色字\033[0m"echo-e"\033[31m红色字\033[0m"echo-e"\033[32m绿色字\033[0m"echo-e"\033[33m黄色字\033[0m"echo-e"\033[34m蓝色字\0......
  • 点积注意力、加性注意力和缩放点积注意力
    什么是点积注意力、加性注意力和缩放点积注意力?点积注意力(DotProductAttention):点积注意力是一种注意力机制,用于计算输入向量之间的相似度。它通过计算两个向量的点积来度量它们的相似程度,然后对结果进行归一化处理得到注意力权重。点积注意力的计算公式如下:注意力权重=softma......