From 9d5803a79aad859e201b94040e369298c7c348b0 Mon Sep 17 00:00:00 2001 From: chensiAb <chenchenco03@163.com> Date: Fri, 23 Aug 2024 10:59:53 +0800 Subject: [PATCH] fix:兼容加载失败时&没数据时,页面显示暂无数据 --- forms/imagePicker/CImageCompressor.vue | 82 ++++++++++++++++++++++++++++++++--------- 1 files changed, 64 insertions(+), 18 deletions(-) diff --git a/forms/imagePicker/CImageCompressor.vue b/forms/imagePicker/CImageCompressor.vue index 4bd1862..55ab730 100644 --- a/forms/imagePicker/CImageCompressor.vue +++ b/forms/imagePicker/CImageCompressor.vue @@ -20,6 +20,12 @@ export default { name: 'CImageCompressor', + props: { + maxSize: { + type: Number, + default: 1600, + }, + }, data() { return { // canvas id @@ -33,6 +39,7 @@ }, methods: { $compress(tempPaths, callback) { + this.imgBlobs = []; // 重置已转图片 if (typeof this.canvasContext === 'undefined') { this.canvasContext = Taro.createCanvasContext(this.cavId, this); } @@ -46,7 +53,7 @@ } // 完成图片压缩 else { - console.log(this.imgBlobs); + callback(this.imgBlobs); } }); }; @@ -57,14 +64,40 @@ src: tempPath, success: res => { const size = this._limitSize(res); - const drawSet = this._creatDrawSet(res, size); - this._drawImage(tempPath, drawSet, compress => { - this.imgBlobs.push({ - source: tempPath, - compress, + // 网页图片压缩 + if (process.env.TARO_ENV === 'h5') { + const drawSet = this._creatDrawSet(res, size); + this._drawImage(tempPath, drawSet, compress => { + this.imgBlobs.push({ + source: tempPath, + compress, + }); + callback(); }); - callback(); - }); + } + // 小程序图片压缩 + else if (process.env.TARO_ENV === 'weapp') { + Taro.compressImage({ + src: tempPath, + quality: 60, + compressedWidth: size[0], + compressHeight: size[1], + success: cps => { + this.imgBlobs.push({ + source: tempPath, + compress: cps.tempFilePath, + }); + callback(); + }, + fail: err => { + this.imgBlobs.push({ + source: tempPath, + compress: tempPath, + }); + callback(); + }, + }); + } }, }); }, @@ -73,12 +106,12 @@ let width, height; // 宽大于高,按宽算 if (res.width >= res.height) { - width = Math.min(res.width, 1600); + width = Math.min(res.width, this.maxSize); height = Math.round(width / rate); } // 按高算 else { - height = Math.min(res.height, 1600); + height = Math.min(res.height, this.maxSize); width = Math.round(height * rate); } return [width, height]; @@ -86,13 +119,10 @@ _setCanvasSize(width, height) { this.cavWidth = width; this.cavHeight = height; - if (process.env.TARO_ENV === 'h5') { - $(this.$refs.canvas.$el) - .find('canvas') - .attr('width', width) - .attr('height', height); - } - // TODO: 小程序中的 canvas 重设 + $(this.$refs.canvas.$el) + .find('canvas') + .attr('width', width) + .attr('height', height); }, _creatDrawSet(res, [width, height]) { const orientation = res.orientation || 'up'; @@ -133,7 +163,23 @@ const [key, params] = step; if (key === 'drawImage') { // 使用图片 - const img = new Image(); + const img = (() => { + if (typeof Image === 'undefined') { + console.log(this.$refs.canvas); + console.log($('canvas[canvas-id=' + this.cavId + ']')); + + const query = Taro.createSelectorQuery(); + query + .select('canvas[canvas-id=' + this.cavId + ']') + .boundingClientRect() + .exec(res => { + console.log(res); + }); + return this.$refs.canvas.createImage(); + } else { + return new Image(); + } + })(); img.src = tempPath; this.canvasContext.drawImage(img, ...params); } else { -- Gitblit v1.9.1