小程序采用html2canvas实现html转canvas保存图片

这篇具有很好参考价值的文章主要介绍了小程序采用html2canvas实现html转canvas保存图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mpaas小程序中采用html2canvas实现html转canvas保存图片
使用uniapp将代码打包一份h5部署到服务器

h5要保存的图片组件页面report.vue

安装 npm install --save html2canvas 或 yarn add html2canvas

引入import html2canvas from ‘html2canvas’;
ts


function getCanvas() {
  timeOutEvent = 0;
  uni.showModal({
    title: '提示',
    content: '您要保存图片到相册吗?',
    success(res) {
      if (res.cancel) {
        return;
      }
      // '#businessReport‘ 当前要保存为图片的代码块的id
      const id = document.querySelector('#businessReport') as HTMLElement;  // ts标注类型
   
      html2canvas(id, {
        useCORS: true,
        allowTaint: true,
        windowHeight: id.scrollHeight, // 如果图片过长,可能会出现图片保存部分空白,scrollHeight是包含滚动条的高度
         // scale和dpi可以调节图片清晰度, 选项{dpi:96}等价于{scale:1},并且任何选项的更大值都将提高分辨率。如果存在两个选项,scale则忽略使用dpi的比例。
        scale: 1,   
      }).then((canvas: any) => {	
        const dataURL = canvas.toDataURL('image/jpeg', 0.8); 、//  第二个参数可以调节图片清晰度
        function dataURLtoFile(dataurl: string, filename: string): File {
          // 获取到base64编码
          const arr = dataurl.split(',');
          const mime = arr[0].match(/:(.*?);/)[1];
          // 将base64编码转为字符串
          const bstr = window.atob(arr[1]);
          let n = bstr.length;
          const u8arr = new Uint8Array(n); // 创建初始化为0的,包含length个元素的无符号整型数组
          while (n--) {
            u8arr[n] = bstr.charCodeAt(n);
          }
          return new File([u8arr], filename, {
            type: mime,
          });
        }
        const body = new FormData();
        body.append('file', dataURLtoFile(dataURL, '666.jpg'));
        // 上传图片 获取网络图片地址
        fetch(`${appCache.$jConfig.baseUrl}/new/api/api/upload?fileType=1&note=666`, {
          method: 'post',
          headers: {
            Authorization: `Bearer ${getApp().globalData!.token}`,
          },
          body,
        }).then(async function (response) {
          const { status } = response;
          let json;
          if (status === 200) {
            json = await response.json();
            try {
              if (my) {
               // 和小程序通信 触发保存图片   若是h5可以直接调用保存的方法
                my.postMessage({
                  type: 'saveImgae',
                  url: json.data,
                });
              }
            } catch (e) {
              console.log(e);
            }
          }
        });
      });
    },
  });
}

小程序中采用webview跳转到h5页面文章来源地址https://www.toymoban.com/news/detail-507865.html

<template class="">
  <web-view :src="url" @message="onMessage"></web-view>
</template>

<script setup lang="ts">
import { onLoad } from '@dcloudio/uni-app';
import { ref } from 'vue';
import appCache from '@/lib/appCache';
const url = ref('');
onLoad((e) => {
  url.value = `${appCache.$jConfig.baseUrl}/pages/report?userId=${e.userId}&token=${e.token}`;
});
function onMessage(e: any) {
// 接收h5传过来的参数
  if (e.detail.type === 'saveImgae') {
    // 保存图片
    uni.getImageInfo({
      src: e.detail.url,
      success: (res) => {
        my.saveImage({
          url: res.path,
          success: () => {
            my.alert({
              content: '保存成功',
            });
          },
          fail: () => {
            my.alert({
              content: '保存失败,请修改读写手机存储权限后重试',
            });
          },
        });
      },
    });
  }
}
</script>

<style scoped></style>

到了这里,关于小程序采用html2canvas实现html转canvas保存图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • html2canvas使用文档

    Install NPM Install Yarn 以 vue 举例,这样写起来比较方便 如果想要将图片导出,可以这样写 名称 默认值 描述 allowTaint false 是否允许跨源图像污染画布 backgroundColor #ffffff 画布背景色(如果在DOM中未指定),为透明设置null canvas null 用作绘图基础的现有画布元素 foreignObjectRendering

    2024年03月28日
    浏览(39)
  • 前端html2canvas和dom-to-image实现截图功能

    目录 需求 历劫过程 截图知识点 html2canvas 文档地址 封装 使用教程  dom-to-image-more 文档地址 封装 使用教程 解决跨域问题 以下是我花了大把时间,薅秃头得出来的最终结果, dom-to-image-more截图时间快到可以让复杂的页面仅需2-3S就能完成截图,内容有点多,请保持耐心慢慢看

    2024年02月15日
    浏览(47)
  • html2canvas截图模糊问题

    最近项目中使用的html2canvas插件打印报表时,发现出现报表模糊的问题,而实际上是插件生成的图片中的像素发生了偏移。 后来查阅html2canvas源码中,发现了以下参数: 参数名称 默认值 描述 scale 1 按比例增加分辨率(2=双倍) dpi 96 将分辨率提高到特定的DPI(每英寸点数)

    2024年01月17日
    浏览(42)
  • html2canvas使用指南

      最近项目中需要使用到将网页中的内容下载成图片,通过按钮点击将页面保存下来,方便同事使用进行工作汇报。如图: 然后我想到了 html2canvas ,就可以解决我现在遇到的问题了。我火速从官网下载了js文件,这里附上链接:   http://html2canvas.hertzen.com/  这里   html2canvas

    2024年02月14日
    浏览(44)
  • Html转PDF,前端JS实现Html页面导出PDF(html2canvas+jspdf)

    一、背景介绍 ​ 当我们在不想改变后端代码的同时想是纯html页面导出PDF,那么(html2canvas+jspdf)就是无疑最好的选择,导出时它不占用我们服务器的资源,而是由用户本地自行执行js文件下载PDF,不占用我们系统的带宽,所以这无非是最好的选择方式。 二、疑问 1、为什么要

    2024年01月23日
    浏览(43)
  • html2canvas截图生产海报图片

    图片地址后添加?time=${new Date().valueOf()},不然会报图片跨域报错 原因:这是因为你img是在缓存数据中读取的 并没有访问远程这个图片的时候没有携带请求头。 确保你的图片服务器支持CORS访问,也就是会返回Access-Control-Allow-Origin等响应头;

    2024年02月02日
    浏览(40)
  • html2Canvas常见问题以及解决

    近期开发在vue中引用了html2Canvas后,使用时遇到一些常见问题,简单总结下: 简单代码使用格式: 阐述:生成图片后,图片下载通过添加a标签,添加download属性进行图片下载 但是在微信开发里面失效了,理由很简单,微信环境下不兼容download属性,解决办法,图片可以通过长

    2024年02月04日
    浏览(51)
  • uniapp APP端使用html2canvas截图分享小程序卡片图片模糊、跨域等问题解决

    项目场景:uniapp  APP端,分享小程序到微信好友,使用html2canvas截取当前页面做卡片封面图。仅是需要展示部分内容用作卡片封面就可以,不强制需要全屏截图。 问题1、部分页面截取到的图片分享到微信后卡片图片模糊。 问题2、截图时报错:Failed to execute \\\'toDataURL\\\' on \\\'HTMLC

    2024年02月05日
    浏览(59)
  • vue-element使用html2canvas实现网页指定区域(指定dom元素)截图

    直接上代码: ** 如果要截取的dom元素、区域涉及到v-if或者v-show的条件表达式时,截取的方法请在nextTick里面调用----例如: this.$nextTick(() = { this.saveImageNew() }) 否之获取dom元素的时候会获取不到!!!!!!!!

    2024年02月04日
    浏览(51)
  • vue2 -- 截图工具html2canvas

    可以将网页中的指定元素或整个页面截取为图片,以便保存或分享。 在 Vue 中使用 html2canvas 实现 1:安装 html2canvas 库。你可以使用 npm 安装,命令如下: 2:在需要使用 html2canvas 的 Vue 组件中,引入 html2canvas 库: :3:编写截图逻辑。你可以在组件的方法中编写,例如:

    2024年01月19日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包