<template>
<view>
<canvas class="mycanvas" canvas-id="mycanvas" @touchstart="touchstart" @touchmove="touchmove"
@touchend="touchend"></canvas>
<view class="footer">
<view class="left" @click="finish">完成</view>
<view class="right" @click="clear">清除</view>
</view>
<image :src="'data:image/png;base64'+img" mode=""></image>
</view>
</template>
<script>
export default {
data() {
return {
ctx: '',
points: [],
img: ''
}
},
created() {
this.ctx = uni.createCanvasContext('mycanvas', this)
this.ctx.lineWidth = 4
this.ctx.lineCap = 'round'
this.ctx.lineJoin = 'round'
},
methods: {
touchstart(e) {
const x = e.changedTouches[0].x
const y = e.changedTouches[0].y
this.points.push({
x,
y
})
// 开启新路径
this.ctx.beginPath();
},
touchmove(e) {
const x = e.changedTouches[0].x
const y = e.changedTouches[0].y
this.points.push({
x,
y
})
if (this.points.length >= 2) {
this.draw()
}
},
touchend() {
this.points = []
},
draw() {
const p1 = this.points[0]
const p2 = this.points[1]
this.points.shift()
this.ctx.moveTo(p1.x, p1.y)
this.ctx.lineTo(p2.x, p2.y)
this.ctx.stroke()
this.ctx.draw(true)
},
clear() {
const that = this
uni.getSystemInfo({
success(e) {
const {
screenWidth,
screenHeight
} = e
that.ctx.clearRect(0, 0, screenWidth, screenHeight);
that.ctx.draw(true);
}
})
},
finish: function() {
var that = this
//生成图片
uni.canvasToTempFilePath({
canvasId: 'mycanvas',
//设置输出图片的宽高
// destWidth:150,
// destHeight:150,
// fileType:'jpg',
// quality: 1.0,
success: function(res) {
uni.uploadFile({
filePath: res.tempFilePath,
name: 'file',
url: 'http://zyck.top:6220/api/admin/file/Upload',
success(resImg) {
uni.showToast({
title: '上传成功',
icon: 'none',
duration: 2000
})
},
fail(resImg) {
wx.showToast({
title: '上传失败',
icon: 'none',
duration: 2000
})
}
})
that.img = res.tempFilePath
},
fail: function() {
wx.showModal({
title: '提示',
content: 'canvas生成图片失败。微信当前版本不支持,请更新到最新版本!',
showCancel: false
});
},
complete: function() {}
})
},
}
}
</script>
<style>
.mycanvas {
width: 100%;
height: 50vh;
background-color: #ECECEC;
}
.footer {
font-size: 16px;
height: 150upx;
display: flex;
justify-content: space-around;
align-items: center;
}
.left,
.right {
line-height: 100upx;
height: 100upx;
width: 250upx;
text-align: center;
font-weight: bold;
color: white;
border-radius: 5upx;
}
.left {
background: #007AFF;
}
.right {
background: orange;
}
</style>