微信小程序给图片加水印【使用uni-app】

选择图片后使用canvas绘制图片,再绘制需要的水印文字,将绘制好的画布转化为图片即可

<template>
	<view class='photoPage'>
		<nav-text text='照片加水印' backgroundColor='#1e65ff' :isHome='false' color='#ffffff'> </nav-text>
		<!-- 放置canvas画布并将其移出画面外 -->
		<canvas :style="'width: '+canvasWidth+'px; height:'+canvasHeight+'px; position:fixed;left:8888px'"
			canvas-id="canvas"></canvas>
		<button @click="chooseImage">上传照片</button>
		<!-- 最终效果照片 -->
		<image :src="src" mode="aspectFit" width="100%"></image>
	</view>
</template>
<script>
	import navText from '@/components/navBarText.vue';
	export default {
		components: {
			navText,
		},
		data() {
			return {
				src: '',
				canvasWidth: 0,
				canvasHeight: 0
			}
		},
		methods: {
			chooseImage() {
				let _this = this
				uni.chooseImage({
					sourceType: ['album', 'camera'],
					success: (res) => {
						_this.compress(res.tempFilePaths[0])
					}
				});
			},
			compress(imageUrl) {
				var _this = this;
				//获取原图片信息
				uni.getImageInfo({
					src: imageUrl,
					success: function(res) {
						// 设置canvas宽高等于原图片宽高
						_this.canvasWidth = res.width;
						_this.canvasHeight = res.height;
						// 创建 canvas 的绘图上下文
						const ctx = uni.createCanvasContext('canvas');
						// 绘制图片
						ctx.drawImage(imageUrl, 0, 0, _this.canvasWidth, _this.canvasHeight);
						// 设置水印颜色大小
						ctx.setFillStyle('white');
						ctx.setFontSize(50);
						// 水印文字
						let time = new Date().toLocaleString();
						// 绘制水印文字
						ctx.fillText(time, 10, res.height - 50);
						// 画到 canvas 中
						ctx.draw(false, function() {  // 参数1: 本次绘制是否接着上一次绘制  参数2: 绘制完成的回调
							// 将画布转化为图片
							uni.canvasToTempFilePath({
								canvasId: 'canvas',
								success: function(res1) {
									_this.src = res1
										.tempFilePath
								}
							})
						})
					}
				})
			}
		}
	}
</script>
<style scoped>
</style>

最终效果
在这里插入图片描述

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值