uni-app 本地选择图片并添加水印,要求同比例输出

发布于 1周前 作者 itying888 来自 Uni-App

uni-app 本地选择图片并添加水印,要求同比例输出

2 回复

在uni-app中实现本地选择图片并添加水印,同时保持图片同比例输出,可以通过以下步骤完成。以下是一个完整的代码示例,包括页面布局、选择图片、添加水印以及保持图片同比例输出。

首先,确保你的项目中已经配置了uni-app的基本环境。

  1. 页面布局(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>
  1. 在页面的<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;是为了隐藏它,因为我们只需要它的绘制功能,而不需要在页面上显示它。

回到顶部