<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>
|