标签:ima 绘制 none height 水印 asd tle raw pen
最近在工作接到了一个任务,就是要生成一个水印图片。在网上查阅了相关的资料,一种是PHP方式,一种是JS的方式,由于不太熟,所以两个都试了一下,现在将JS的方式分享如下。
生成文字水印-watermask
一、读取图像文件渲染到img标签
function blobToImg(blob) {
return new Promise((resolve, reject) => {
let reader = new FileReader()
reader.addEventListener(‘load‘, () => {
let img = new Image()
img.src = reader.result
img.addEventListener(‘load‘, () => resolve(img))
})
reader.readAsDataURL(blob)
})
}
二、将img标签内容绘制到canvas画布
function imgToCanvas(img) {
let canvas = document.createElement(‘canvas‘)
canvas.width = img.width
canvas.height = img.height
let ctx = canvas.getContext(‘2d‘)
ctx.drawImage(img, 0, 0)
return canvas
}
三、canvas画布上绘制水印并转换为Blob对象
function watermark(canvas, text, leftNum, topNum) {
return new Promise((resolve, reject) => {
let ctx = canvas.getContext(‘2d‘)
ctx.font = ‘30px 宋体‘
ctx.fillStyle = ‘#FFF‘
ctx.textAlign = ‘right‘
ctx.fillText(text, leftNum, topNum)
canvas.toBlob(blob => resolve(blob))
})
}
四、图片添加水印接口
function imgWatermark(dom, text, blobObj, leftNum, topNum) {
async function test() {
let img = await blobToImg(blobObj)
let canvas = imgToCanvas(img)
let blob = await watermark(canvas, text, leftNum, topNum)
// 此处将Blob读取到img标签,并在dom内渲染出来;如果是上传文件,可以将blob添加到FormData中
let newImage = await blobToImg(blob)
dom.appendChild(newImage)
}
test()
}
五、最终调用watermask接口函数即可
总结:这个文章在自己的个人博客上也有分享,欢迎大家转载、查看、评论。
标签:ima 绘制 none height 水印 asd tle raw pen
原文地址:https://www.cnblogs.com/liuzhanwei/p/14301906.html