首页 > 其他分享 >html2canvas插件 线上image转base64

html2canvas插件 线上image转base64

时间:2024-06-17 16:20:54浏览次数:24  
标签:插件 const img image base64 canvas html2canvas error response


Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
html2canvas,如果html中有image,需要转base64才能正常转换 image。本地调试可能存在跨域访问图片问题。由于图片服务器未开启跨域允许权限。
Access-Control-Allow-Origin: *

方式 1:
import axios from 'axios'

const fetchImgFile = async (url: string) => {
    return await axios({
      url: 'https://xxx.com.cn/xxx.png',
      responseType: "arraybuffer",
    }).then((response) => {
      // 将获取的二进制数据转换为Base64编码
      const base64String = btoa(
        new Uint8Array(response.data).reduce(
          (data, byte) => data + String.fromCharCode(byte),
          ""
        )
      );
      return {
        src: "data:${image/jpeg};base64," + base64String,
        success: true,
      };
    }).catch((error) => {
      console.error("Error fetching image:", error);
      return {
        success: false,
        src: "",
      };
    });
  }

方式2:

const fetchHandle = (imageUrl: string) => {
    // 使用fetch请求图片资源
    fetch(imageUrl)
    .then(response => {
      // 确保请求成功
      if (!response.ok) {
        throw new Error('Network response was not ok ' + response.statusText);
      }
      return response.blob(); // 将响应转换为Blob对象
    })
    .then(blob => {
      // 创建一个对象URL来代表Blob对象
      const objectUrl = URL.createObjectURL(blob);

      // 创建一个新的Image元素并设置src属性为对象URL
      const img = document.createElement('img');
      img.src = objectUrl;

      // 将图片添加到DOM中
      document.body.appendChild(img);
    })
    .catch(error => {
      console.error('There has been a problem with your fetch operation:', error);
    });

  }

方式3:

 const base64Handle = () => {
    // 创建一个Image对象
    const img = new Image()
    img.crossOrigin = 'Anonymous'
    img.setAttribute('crossOrigin', 'Anonymous')
    img.crossOrigin = '*'

    // 设置图片加载完成后的回调函数
    img.onload = function () {
      // 创建一个Canvas元素
      const canvas = document.createElement('canvas')
      canvas.width = img.width
      canvas.height = img.height
      // 获取2D绘图上下文
      const ctx = canvas.getContext('2d')
      // 在Canvas上绘制图片
      ctx?.drawImage(img, 0, 0)
      // 将Canvas上的内容转换为Base64格式
      const base64Data = canvas.toDataURL('image/png')
      // 打印Base64格式的图片数据
      console(base64Data)
    }

    img.src = 'https://xxx.com/xxx.jpeg'
  }

 

标签:插件,const,img,image,base64,canvas,html2canvas,error,response
From: https://www.cnblogs.com/swt-axios/p/18252646

相关文章

  • WordPress基础之主题和插件安装
    本篇文章学习WordPress如何安装主题、插件。同时推荐几个我常用的主题、插件及其设置方法。WordPress有海量的主题和插件,有付费的,也有免费的。每个主题都有自己的优缺点,当然,你可以在WP测试站上随意的安装删除主题,直到确定好网站的整体风格后再安装到正式网站中。1.WordPress主......
  • Vim基础操作:常用命令、安装插件、在VS Code中使用Vim及解决Vim编辑键盘错乱
    Vim模式普通模式(NormalMode):这是Vim的默认模式,用于执行文本编辑命令,如复制、粘贴、删除等。在此模式下,你可以使用各种Vim命令来操作文本。插入模式(InsertMode):在这个模式下,你可以像在普通的文本编辑器中一样输入文本。从普通模式切换到插入模式,可以使用以下命令:......
  • VS插件开发实现简单的 ViewModel 和 View 之间的切换
    VS插件开发实现简单的ViewModel和View之间的切换1.前言我们在前面一篇中有介绍如何打开文件,如果和ViewModel与View的切换这个场景结合,那么我们也完全有能力写出一段代码来解决。2.代码目标进行*ViewModel.cs和*View.xaml之间的切换。3.可以预见的缺陷我们仅......
  • 04-jQuery工具函数及 jQuery 插件
    1.jQuery工具函数在jQuery中,工具函数是指直接依附于jQuery对象,针对jQuery对象本身定义的方法,即全局性的,我们统称为工具函数,或Utilites函数。主要作用于:字符串、数组、对象。调用格式:$.函数名()或jQuery.函数名()1.1$.get()通过远程HTTPGET请求载入信息。jQue......
  • Android Studio 插件分享——Gradle Utilities
    插件地址GradleUtilities这个插件可以用来管理Gradle相关的文件,同时用来升级Gradle这个插件提供了一些有用的实用程序来支持Gradle的日常工作:列出所有正在运行的Gradle守护进程及其状态。此外,还可以执行终止守护程序或查看其命令行的操作。管理Gradle主页:清除......
  • Android Studio 插件分享——Gradle Utilities
    插件地址GradleUtilities这个插件可以用来管理Gradle相关的文件,同时用来升级Gradle这个插件提供了一些有用的实用程序来支持Gradle的日常工作:列出所有正在运行的Gradle守护进程及其状态。此外,还可以执行终止守护程序或查看其命令行的操作。管理Gradle主页:清除......
  • 视野修炼-技术周刊第88期 | 突出变量插件
    欢迎来到第88期的【视野修炼-技术周刊】,下面是本期的精选内容简介......
  • 微信同声传译小程序插件使用教程
    微信同声传译小程序插件——机器翻译、智能语音案例可搜索“一起学英语鸭”小程序查看, 实现效果如下图:插件功能语音转文字语音合成文本翻译 step1:添加插件在使用前,需要登录官网设置→第三方服务→添加插件搜索【微信同声传译】并添加在需要使......
  • mybatis plus 启用 mybatis插件
      mybatisplus启用mybatis插件在使用MyBatis-Plus时,要启用MyBatis插件,你需要遵循以下步骤:实现自定义插件:创建一个类,实现Interceptor接口。注册插件:在MyBatis配置文件中或通过Java配置方式注册插件。下面是一个简单的自定义MyBatis插件示例:imp......
  • Android Media Framework(六)插件式编程与OMXStore
    必读:AndroidMediaFramework-开篇OpenMAXILSpec阅读到上一节就结束了,这一节开始正式进入到Framework阅读阶段,我们将了解OpenMAX框架是如何与AndroidFramework连接的。1、插件式编程插件式编程(Plugin-basedProgramming)是一种软件开发模式,它允许开发者通过编写独立的、......