<template> <view class="container"> <page-title>图片预览</page-title> <view class="main-canvas"> <canvas :style="{width:canvasWidth,height:canvasHeight}" canvas-id="myCanvas"></canvas> <image :src='waterMark'></image> </view> </view> </template> <script setup> import { ref } from 'vue' import { onLoad, onUnload } from "@dcloudio/uni-app" let canvasWidth = ref(0); let canvasHeight = ref(0); let waterMark = ref('') function createCanvas(options) { let width = 0; let height = 0; uni.getSystemInfo({ success: res => { width = res.windowWidth * 0.92 } }) uni.getImageInfo({ src: options.url, success: res => { height = res.height / res.width * width; canvasWidth.value = width + 'px'; canvasHeight.value = height + 'px'; const ctx = uni.createCanvasContext('myCanvas'); ctx.draw(false, () => { setTimeout(() => { ctx.drawImage(res.path, 0, 0, width, height); ctx.clearRect(0, 0, width, height); ctx.textAlign = 'left'; ctx.textBaseline = 'top'; ctx.font = '12px Microsoft Yahei' ctx.fillStyle = 'rgba(255, 255, 255, 0.5)' ctx.fillText(options.time, width - 140, height - 20, res.width) uni.canvasToTempFilePath({ canvasId: "myCanvas", success: res => { // let p = plus.io.convertLocalFileSystemURL(res.tempFilePath); // console.log(p); waterMark.value = 'file:///' + p } }) }, 500) }); } }) } onLoad(options => { createCanvas(options) }) onUnload(() => {}) </script> <style lang="scss" scoped> .main-canvas { position: absolute; top: 14%; left: 4%; width: 92%; height: 86%; } </style>