2 回复
联系我哦Q
在uni-app中实现本地选择图片并添加水印,同时保持图片同比例输出,可以通过以下步骤完成。以下是一个完整的代码示例,包括页面布局、选择图片、添加水印以及保持图片同比例输出。
首先,确保你的项目中已经配置了uni-app的基本环境。
- 页面布局(
pages/index/index.vue
):
<template>
<view class="container">
<button @click="chooseImage">选择图片</button>
<image v-if="originalImage" :src="originalImage" class="image" mode="widthFix"></image>
<image v-if="watermarkedImage" :src="watermarkedImage" class="image" mode="widthFix"></image>
</view>
</template>
<script>
export default {
data() {
return {
originalImage: '',
watermarkedImage: ''
};
},
methods: {
chooseImage() {
uni.chooseImage({
count: 1,
success: (res) => {
const tempFilePath = res.tempFilePaths[0];
this.originalImage = tempFilePath;
this.addWatermark(tempFilePath);
}
});
},
addWatermark(imagePath) {
uni.getImageInfo({
src: imagePath,
success: (imageInfo) => {
const { width, height } = imageInfo;
const ctx = uni.createCanvasContext('watermarkCanvas');
ctx.drawImage(imagePath, 0, 0, width, height);
ctx.setFontSize(20);
ctx.setFillStyle('rgba(255, 255, 255, 0.5)');
ctx.fillText('Watermark', 10, height - 10);
ctx.draw(false, () => {
uni.canvasToTempFilePath({
canvasId: 'watermarkCanvas',
destWidth: width,
destHeight: height,
success: (res) => {
this.watermarkedImage = res.tempFilePath;
}
});
});
}
});
}
}
};
</script>
<style>
.container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 20px;
}
.image {
margin: 20px 0;
width: 100%;
max-width: 300px;
}
</style>
- 在页面的
<template>
部分添加一个<canvas>
元素(确保canvas的id为watermarkCanvas
,且尺寸足够大以容纳图片):
<canvas canvas-id="watermarkCanvas" style="width: 300px; height: 400px; position: absolute; top: -9999px;"></canvas>
以上代码展示了如何在uni-app中选择本地图片,并在图片上添加水印,同时保持图片的同比例输出。通过uni.chooseImage
选择图片,uni.getImageInfo
获取图片信息,uni.createCanvasContext
创建画布上下文,ctx.drawImage
绘制图片,ctx.fillText
添加水印,最后通过uni.canvasToTempFilePath
将画布内容转换为图片路径。
注意:<canvas>
元素的样式设置为position: absolute; top: -9999px;
是为了隐藏它,因为我们只需要它的绘制功能,而不需要在页面上显示它。