效果为:两张图片一排
新建js文件方法,以便调用
const mergeImgs = (list) => {
return new Promise((resolve, reject) => {
// 创建 canvas 节点并初始化
const canvas = document.createElement('canvas');
if (list.length === 1) {
canvas.width = 100; //设置 canvas 的宽度
} else {
canvas.width = 200
}
let beiShu = parseInt((list.length / 2) + '')
if (list.length % 2 != 0) {
beiShu = beiShu + 1
}
canvas.height = beiShu * 100;
// if (list.length % 2 === 0) {
// canvas.height = list.length * 100; // 设置canvans 的高度
// } else {
// canvas.height = list.length * 100; // 设置canvans 的高度
// }
const context = canvas.getContext('2d');
list.map((item, index) => { // 循环每张图片资源
const img = new Image();
img.src = item;
// 跨域
img.crossOrigin = 'Anonymous';
img.onload = () => {
let left = 0
let top = 0
if (index % 2 == 0) {
left = 0
top = 100 * Math.floor(index / 2)
} else {
left = 100
top = 100 * Math.floor(index / 2)
}
context.drawImage(img, left, top, 90, 90)
// if (index == 0) {
// // 截取整张图片
// context.drawImage(img, 0, 0, 100, 100);
// } else {
// // 截取图片对应位置的画面
// context.drawImage(
// img,
// 0, // 开始剪切图片的 x 坐标位置
// 100, // 开始剪切图片的 y 坐标位置
// 100, // 被剪切图像的宽度
// 100, // 被剪切图像的高度
// 0, // 在画布上放置图像的 x 坐标位置
// 100, // 在画布上放置图像的 y 坐标位置
// 100, // 被剪裁图像的宽度
// 100 // 被剪裁图像的高度
// );
// }
if (index === list.length - 1) {
resolve(canvas.toDataURL('image/png')); // canvas上所有图片绘制完成后返回生成的图片
}
};
});
});
}
export { mergeImgs }
使用
import { mergeImgs } from './index'
// 图片合并
mergeImgs(arr) {
mergeImgs(arr).then(res => {
// base64图片地址为res
console.log(res)
})
},