<view class="content">
<view @tap="ChooseImage()">点击上传图片</view>
</view>
import {compressImg } from '../../utils/util.js' 公用的图片压缩路径
methods: {
ChooseImage() {
let that = this
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: res => {
const imgSize = res.tempFiles[0] && res.tempFiles[0].size ? res.tempFiles[0].size : 0; //图片大小
//判断图片大于 1m 走下面的图片压缩
if (imgSize > 1024) {
let b = compressImg(res.tempFiles[0]).then(res => {
console.log(res)
})
} else {
}
}
})
}
}
// util.js文件 看清楚路径
function compressImg(file) {
var src;
var files;
var fileName = file&&file.name?file.name:'';
var fileSize = parseFloat(parseInt(file['size']) / 1024 / 1024).toFixed(2);
var read = new FileReader();
read.readAsDataURL(file);
return new Promise(function(resolve, reject) {
read.onload = function(e) {
var img = new Image();
img.src = e.target.result;
img.onload = function() {
//默认按比例压缩
var w = this.width,
h = this.height;
//生成canvas
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var base64;
// 创建属性节点
canvas.setAttribute("width", w);
canvas.setAttribute("height", h);
ctx.drawImage(this, 0, 0, w, h);
if (fileSize < 1) {
//如果图片小于一兆 那么不执行压缩操作
base64 = canvas.toDataURL(file['type'], 1);
} else if (fileSize > 1 && fileSize < 2) {
//如果图片大于1M并且小于2M 那么压缩0.5
base64 = canvas.toDataURL(file['type'], 0.5);
} else {
//如果图片超过2m 那么压缩0.2
base64 = canvas.toDataURL(file['type'], 0.2);
}
// 回调函数返回file的值(将base64编码转成file)
files = dataURLtoFile(base64,fileName); //如果后台接收类型为base64的话这一步可以省略
resolve(files)
}
}
})
};
function dataURLtoFile(dataurl,filename) {
var arr = dataurl.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 File([u8arr],filename, { type: mime });
}
module.exports = {
compressImg
}
vue uni-app 上传图片 图片压缩 优化
最新推荐文章于 2025-02-08 14:53:21 发布