| @ -0,0 +1,111 @@ | |||
| <template> | |||
| <view style="position: fixed; top: 100vh;"> | |||
| <image :src="imageUrl" @load="crop" @error="afterLoadImg" /> | |||
| <canvas class="canvas" canvas-id="canvas" style="width: 500px; height: 400px;"></canvas> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import utils from '@/utils/utils.js' | |||
| export default { | |||
| data() { | |||
| return { | |||
| imageUrl: null, | |||
| } | |||
| }, | |||
| methods: { | |||
| afterLoadImg() { | |||
| uni.hideLoading() | |||
| }, | |||
| cutImgShare(imgUrl, w, h, that) { | |||
| console.log('--imgUrl', imgUrl) | |||
| return new Promise((resolve, reject) => { | |||
| uni.getImageInfo({ | |||
| src: imgUrl, | |||
| success(res) { | |||
| try { | |||
| const context = uni.createCanvasContext('canvas', that); | |||
| console.log('--context', context) | |||
| let sWidth = w | |||
| let sHeight = h | |||
| let sx = 0 | |||
| let sy = 0; | |||
| let dWidth = 500 | |||
| let dHeight = 400 | |||
| console.log('--w', w, '--h', h) | |||
| if (w <= h) { | |||
| sHeight = Math.floor(sWidth / 5 * 4); | |||
| sy = Math.floor((h - sHeight) / 2) | |||
| } else { | |||
| sWidth = Math.floor(sHeight / 4 * 5); | |||
| sx = Math.floor((w - sWidth) / 2) | |||
| } | |||
| console.log('--sx', sx, '--sy', sy, '--sWidth', sWidth, '--sHeight', sHeight) | |||
| context.drawImage(res.path, sx, sy, sWidth, sHeight, 0, 0, dWidth, dHeight); | |||
| context.draw(true, setTimeout(() => { | |||
| uni.canvasToTempFilePath({ | |||
| canvasId: 'canvas', | |||
| fileType: 'jpg', | |||
| success: (res) => { | |||
| console.log(res.tempFilePath) | |||
| resolve(res.tempFilePath); | |||
| }, | |||
| fail(err) { | |||
| console.log(err); | |||
| reject(err) | |||
| } | |||
| }, that); | |||
| }, 200)); | |||
| } catch (err) { | |||
| reject(err) | |||
| } | |||
| }, | |||
| fail(err) { | |||
| console.log('获取图片信息失败', err); | |||
| reject(err) | |||
| } | |||
| }); | |||
| }); | |||
| }, | |||
| set(imageUrl) { | |||
| console.log('--set', imageUrl) | |||
| this.imageUrl = imageUrl | |||
| uni.showLoading({ | |||
| title: '上传中...' | |||
| }) | |||
| }, | |||
| async crop(e) { | |||
| console.log('--crop', e) | |||
| let that = this | |||
| try { | |||
| const { width, height } = e.target | |||
| let fileUrl = await this.cutImgShare(this.imageUrl, width, height, that) | |||
| this.$Oss.ossUpload(fileUrl).then(url => { | |||
| console.log('--shareImg', url) | |||
| this.$emit('change', url) | |||
| }) | |||
| } catch (err) { | |||
| console.log('--err', err) | |||
| this.$emit('change', this.imageUrl) | |||
| } | |||
| this.afterLoadImg() | |||
| }, | |||
| }, | |||
| } | |||
| </script> | |||
| <style> | |||
| </style> | |||