/** * @description 图片处理方法 * */ export default { /** * @description 获取图片信息 * @param {string} src 地址 * @return {number} * */ getImageInfo(src) { return new Promise((resolve, reject) => { if (!src) { reject('图片地址不能为空!'); } uni.getImageInfo({ src, success(res) { // #ifdef MP-ALIPAY res.errMsg = 'getImageInfo:ok';//支付宝小程序直接 返回图片信息 没有 ‘getImageInfo:ok’ // #endif if (res.errMsg === 'getImageInfo:ok') { resolve(res); } else { reject('获取图片信息失败!'); } }, fail(err) { reject('调取获取图片接口失败!'); } }); }); }, /*选取图片*/ chooseImage({count = 9, sizeType = ['original', 'compressed'], sourceType = ['album', 'camera']} = {count: 9, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera']}) { return new Promise((resolve, reject) => { uni.chooseImage({ count, sizeType, sourceType, success(res) { console.log(res) if (res.errMsg === 'chooseImage:ok') { resolve(res.tempFilePaths); } else { reject('选取图片失败'); } }, fail(err) { console.log('error',err) reject('取消选取图片'); } }); }); }, /*图片预览 * path 图片下标 或路径 * imgs 图片集合 * */ previewImage(path, imgs) { uni.previewImage({ current: path, urls: imgs }); }, /*压缩图片*/ /*图片转base64*/ /*图片转本地临时路径blob*/ img2blob() { } /*图片截取*/ /*图片转base64*/ , img2base64(path) { return new Promise(((resolve, reject) => { if (path.includes(';base64,')) { resolve(path) return; } // #ifdef H5 window.URL = window.URL || window.webkitURL; var xhr = new XMLHttpRequest(); xhr.open("get", path, true); // 至关重要 xhr.responseType = "blob"; xhr.onload = function () { if (this.status == 200) { //得到一个blob对象 var blob = this.response; console.log("blob", blob) // 至关重要 let oFileReader = new FileReader(); oFileReader.onloadend = function (e) { let base64 = e.target.result; resolve(base64) }; oFileReader.readAsDataURL(blob); } } xhr.send(); // #endif // #ifdef MP-WEIXIN uni.getFileSystemManager().readFile({ filePath: path, encoding: 'base64', success: function (data) { let path = 'data:image/jpeg;base64,' + data.data; resolve(path) }, fail() { reject('图片转base64失败') } }); // #endif // #ifdef APP-PLUS plus.io.resolveLocalFileSystemURL(path, (entry) =>{ entry.file( (e)=> { let fileReader = new plus.io.FileReader(); fileReader.onload = function(r){ resolve(r.target.result) } fileReader.readAsDataURL(e) }) }) // #endif })) }, /** * @description 缩放图片 * @param img_size {number} 原图大小 * @param img_width {number} 原图宽度 * @param img_height {number} 原图高度 * @param img_zoom_size {number} 缩放后的图大小 kb * @param max_width_or_height {number} 缩放后的最大高 * @return re {object} 返回图片的尺寸信息 * */ imgZoom({img_size, img_width, img_height, img_zoom_size, max_width_or_height}) { let re = {width: img_width, height: img_height}; if (img_zoom_size) { /*如果需要压缩的大小大于原大小则不处理*/ if (img_zoom_size >= img_size) { return re; } /*压缩倍数*/ let beis = img_size / img_zoom_size; /*根据压缩设置压缩宽高*/ re.width = Math.ceil(img_width / beis); re.height = Math.ceil(img_height / beis); } else if (max_width_or_height) { let max_size = Math.max(img_width, img_height); if (max_width_or_height >= max_size) { return re; } /*压缩倍数*/ let beis = max_size / max_width_or_height; re.width = Math.ceil(img_width / beis); re.height = Math.ceil(img_height / beis); } return re; }, base642Blob(dataURI) { var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; // mime类型 var byteString = atob(dataURI.split(',')[1]); //base64 解码 var arrayBuffer = new ArrayBuffer(byteString.length); //创建缓冲数组 var intArray = new Uint8Array(arrayBuffer); //创建视图 for (var i = 0; i < byteString.length; i++) { intArray[i] = byteString.charCodeAt(i); } return new Blob([intArray], {type: mimeString}); }, /*压缩图片指定大小*/ compressImg(url, canvas_id, width = 100, height = 100, self) { return new Promise((resolve, reject) => { /*加上延迟 处理h5 防止为改变dome 大小就开始绘制 会出现图片显示不完整*/ setTimeout(()=>{ const ctx = uni.createCanvasContext(canvas_id, self); console.log(ctx, url, canvas_id, width, height, self) ctx.setFillStyle('#fff') ctx.fillRect(0, 0, width, height) ctx.drawImage(url, 0, 0, width, height ); ctx.draw(false, () => { setTimeout(() => { uni.canvasToTempFilePath({ x:0, y:0, canvasId: canvas_id, width: width, height: height, destWidth: width, destHeight: height, success: (res) => { // #ifdef H5 // document.querySelector('canvas').toBlob( (fileSrc)=> { // console.log(888,fileSrc) // let imgSrc = window.URL.createObjectURL(fileSrc) // resolve(imgSrc) // // }) resolve(res.tempFilePath) // resolve(URL.createObjectURL(this.base642Blob(res.tempFilePath))) // #endif // #ifndef H5 resolve(res.tempFilePath) // #endif }, fail: (err) => { console.log(err) } }, self) }, 500) }) },500) }) } };