ie下js将html转为图片格式,前端使用html2Canvas或dom-to-image将html生成图片(兼容IE)...

本文介绍了一种将HTML内容转换为图片的方法,并提供了适用于不同浏览器环境的实现方案,包括IE浏览器的支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作

导入框架

"canvas-toBlob": "^1.0.0", // yarn add canvas-toBlob or npm install canvas-toBlob --save

"file-saver": "^2.0.2", // yarn add file-saver or npm install file-saver --save

"html2canvas": "^1.0.0-rc.5", // yarn add html2canvas or npm install html2canvas --save

"jquery": "^1.0.0-rc.5", // yarn add jquery or npm install jquery --save

工具封装 domToImage.js

import html2canvas from 'html2canvas';

import FileSaver from 'file-saver';

import $ from 'jquery';

import 'canvas-toBlob';

function clickTarget(target) {

const { userAgent } = navigator;

if (userAgent.includes('Firefox')) {

const event = document.createEvent('MouseEvents');

event.initEvent('click', true, true);

target.dispatchEvent(event);

} else {

target.click();

}

}

function dataURLtoBlob(dataUrl) {

const arr = dataUrl.split(',');

const mime = arr[0].match(/:(.*?);/)[1];

const bstr = atob(arr[1]);

let n = bstr.length;

const u8arr = new Uint8Array(n);

while (n) {

n -= 1;

u8arr[n] = bstr.charCodeAt(n);

}

return new Blob([u8arr], { type: mime });

}

/**

* 传入适合参数将html生成图片(适配IE)

* @param {*} params

* node: 需要生成图片的html标签

* pngName: 导出的图片名称

* shouldNotDownload:是否不需要将生成的图片下载到电脑,默认false

* responseResultMethod:执行方法的结果回调 resultCode: 200 成功

*/

function html2canvasToImage(params) {

const {

node,

pngName,

shouldNotDownload,

responseResultMethod,

} = params;

if (!node) {

throw new Error('节点不存在');

}

const option = {

allowTaint: true, // Whether to allow cross-origin images to taint the canvas

useCORS: true, // Whether to attempt to load images from a server using CORS

};

html2canvas(node, option).then(canvas => {

if (shouldNotDownload) {

if (responseResultMethod) responseResultMethod({ resultCode: 200, canvas });

} else {

canvas.toBlob(blob => {

FileSaver.saveAs(blob, `${pngName || 'html2canvas'}.png`);

if (responseResultMethod) responseResultMethod({ resultCode: 200, blob });

});

}

}).catch(error => {

console.error('html2canvas', error);

if (responseResultMethod) responseResultMethod({ resultCode: 110, error });

});

}

/**

* 已知canvas或dataUrl将其以图片形式导出(适配IE)

* @param {*} params

* canvas: canvas值

* dataUrl: dataUrl值

* imageName: 导出的图片名称

* responseResultMethod:执行方法的结果回调 resultCode: 200 成功

*/

function useCanvasOrDataUrlDownlodImage(params) {

const {

canvas,

dataUrl,

imageName,

responseResultMethod,

useATag, // 使用a标签下载图片

} = params;

if (!canvas && !dataUrl) {

throw new Error('canvas或dataUrl不存在');

}

//

const fileName = `${imageName || 'html2canvas'}.png`;

if (useATag) {

if (!!window.ActiveXObject || 'ActiveXObject' in window) {

const blob = canvas.msToBlob();

window.navigator.msSaveBlob(blob, fileName);

} else {

const url = canvas.toDataURL();

// 以下代码为下载此图片功能

clickTarget($(``)[0]);

}

} else if (dataUrl && !canvas) {

const blob = dataURLtoBlob(dataUrl);

FileSaver.saveAs(blob, fileName);

if (responseResultMethod) responseResultMethod({ resultCode: 200 });

} else {

canvas.toBlob(blob => {

FileSaver.saveAs(blob, fileName);

if (responseResultMethod) responseResultMethod({ resultCode: 200, blob });

});

}

}

export {

html2canvasToImage,

useCanvasOrDataUrlDownlodImage,

};

如何使用

import { html2canvasToImage } from 'domToImage';

const params = {

node: this.contentContainerRef,

pngName: '图片名称',

shouldNotDownload: false,

responseResultMethod: response => {

console.log(response);

},

};

html2canvasToImage(params);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值