uni-app H5端 图片上传压缩,并判断压缩后大小

uni-app H5端 图片上传压缩,并判断压缩后大小

公司要做uni-app 的H5图片压缩,之前app端使用 plus.zip.compressImage 在H5端已经不能使用,所以在网上找了一下,但是很多不使用,需要改造下,得到压缩后的图片路径和大小

1.创建imageZip.js

/** * 压缩 * @param {Object} imgSrc 图片url * @param {Object} callback 回调设置返回值 */
export function translate(imgSrc, callback) {
	var img = new Image();
	img.src = imgSrc;
	img.onload = function() {
		var that = this;
		var h = that.height; // 默认按比例压缩		
		var w = that.width;
		var canvas = document.createElement('canvas');
		var ctx = canvas.getContext('2d');
		var anw = document.createAttribute("width");
		anw.nodeValue = w;
		var anh = document.createAttribute("height");
		anh.nodeValue = h;
		canvas.setAttributeNode(anw);
		canvas.setAttributeNode(anh);
		ctx.drawImage(that, 0, 0, w, h); //压缩比例		
		var quality = 0.1;
		var base64 = canvas.toDataURL('image/jpeg', quality);
		canvas = null;
		var blob = base64ToBlob(base64);
		//压缩之后的图片大小
		var sizeZip = blob.size		
		//Blob对象转blob地址		
		var blobUrl = window.URL.createObjectURL(blob);
		let res = {
			url:blobUrl,
			size:sizeZip
		}
		callback(res);
	}
} /** * base转Blob对象 * @param {Object} base64 base64地址 */
export function base64ToBlob(base64) {
	var arr = base64.split(','),
		mime = arr[0].match(/:(.*?);/)[1],
		bstr = atob(arr[1]),
		n = bstr.length,
		u8arr = new Uint8Array(n);
	while (n--) {
		u8arr[n] = bstr.charCodeAt(n);
	}
	return new Blob([u8arr], {
		type: mime
	});
}

2.在request.js引入imageZip.js

import * as TranslateImage from './imageZip.js'

3.在request.js,使用

// 图片压缩
						TranslateImage.translate(res.tempFiles[0].path, ((res) => {
							// console.log(res)
							if (Number(res.size) > 1000000) {
								uni.showModal({
									content: `图片过大${(e.size)},请重新上传`,
									showCancel: false,
									success() {

									}
								})
								return
							}
							let files = [{
								"path": res.url,
								"size": res.size,
							}]
//调用上传图片服务器
							return
						}))
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值