vue项目中图片显示前端使用js添加水印
解决思路: 1、 先将img图片绘制为canvas 2、 使用canva 绘制所要自定义添加的内容标识 3、 再将绘制好的canvas转为base64的地址使用img显示出来 代码及步骤注释如下(可以直接看效果显示):
<template> <div> <img id="myimg" :src="imgUrl" alt=""> </div> </template> <style> .seamless-warp { height: 229px; overflow: hidden; } </style> <script> export default { data () { return { imgUrl: } }, mounted () { // 调用方法传入对应的参数 this.getImgUrl({ url: http://172:8080/自己的图片地址, content: 周末了撸串去啊, cb: (base64Url) => { // 使用两种方法设置显示img的src都可以 // document.getElementById(myimg).src = base64Url this.imgUrl = base64Url } }) }, methods: { getImgUrl ({ url = , textAlign = left, textBaseline = top, font = 18px Microsoft Yahei, fillStyle = rgba(255, 255, 255, 0.5), content = 我是默认的水印参数, cb = null, textX = 100, textY = 30 } = {}) { // 创建所需要添加水印的img图片 const img = new Image() img.src = url img.crossOrigin = anonymous img.onload = function () { // 创建canvas,并将创建的img绘制成canvas const canvas = document.createElement(canvas) canvas.width = img.width canvas.height = img.height const ctx = canvas.getContext(2d) ctx.drawImage(img, 0, 0) ctx.textAlign = textAlign ctx.textBaseline = textBaseline ctx.font = font ctx.fillStyle = fillStyle ctx.rotate((Math.PI / 180) * 15) // 循环绘制水印 // ctx.fillText(content, img.width - textX, img.height - textY) for (let i = 0; i < img.height / 120; i++) { for (let j = 0; j < img.width / 50; j++) { ctx.fillText(content, i * 200, j * 100, img.width) } } // 将绘制完成的canvas转换为base64的地址 const base64Url = canvas.toDataURL() cb && cb(base64Url) } } } } </script>