vue项目实现多张图片导出zip文件

场景:批量导出图片并放在一个zip文件下导出,借助jszip以及file-saver插件

1、npm install jszip /  npm install file-saver

import JSZip from 'jszip';
import FileSaver from 'file-saver';

/**
 * @description:图片导出zip文件
 * @param {*} title  zip文件名
 * @param {*} imgList 需要导出的图片列表
 * @param {*} eachImgKey 每张图片名称的key值 默认为name
 * @param {*} eachUrlKey 每张图片名称的url值  默认为baseImg
 * @return {*}
 */

getImageZip(title, imgList, eachImgKey = 'name', eachUrlKey = 'baseImg') {
	let zip = new JSZip();
	let imgs = zip.folder(title);
	let baseList = [];
	imgList.forEach(imgD => {
		let name = imgD[eachImgKey]; //每张图片的名称
		let image = new Image();
		// 解决跨域 Canvas 污染问题
		image.setAttribute('crossOrigin', 'anonymous');
		image.onload = function () {
			let canvas = document.createElement('canvas');
			canvas.width = image.width;
			canvas.height = image.height;
			let context = canvas.getContext('2d');
			context.drawImage(image, 0, 0, image.width, image.height);
			let url = canvas.toDataURL(); // 得到图片的base64编码数据
			canvas.toDataURL('image/png');
			baseList.push({ name, img: url.substring(22) });
			if (baseList.length === imgList.length) {
				if (baseList.length > 0) {
					baseList.forEach(baseImg => {
						imgs.file(baseImg.name + '.png', baseImg.img, {
							base64: true,
						});
					});
					zip.generateAsync({ type: 'blob' }).then(content => {
						FileSaver.saveAs(content, title + '.zip');
					});
				}
			}
		};
		image.src = imgD[eachUrlKey] = `${imgD[eachUrlKey]}`;
	});
},

2、使用封装的方法:

<a @click="getImageZip('susu测试', img_list)">导出</a>
let img_list =[
    {
	    name: '图片一',
	    baseImg: 'https://res.miaocode.com/web/mk/csys/bg3_new.png',
    },
    {
	    name: '图片二',
	    baseImg: 'https://res.miaocode.com/web/mk/csys/bg3_new.png',
    },

]

效果:

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值