图片添加水印

本文介绍了如何使用JavaScript的CanvasAPI在图片上添加单行文字水印,并处理跨域问题,同时提供Base64编码下载功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图片添加单行文字水印

使用canvas创建图片画布,再添加文字水印

直接上代码

//watermark.js
export const watermarkImg = url=> {
  let content = 'xxxxx' //水印文字内容
  let imageConnew
  if (url) {
    imageConnew = img //获取图片地址
  }
  let canvas = document.createElement('canvas') //创建canvas容器
  let ctx = canvas.getContext('2d') //获取2d画笔

  // new img   解决canvas跨域报错
  let image = new Image()
  image.crossOrigin = 'anonymous' 
  image.src = imageConnew
  //图片加载完成后
  image.onload = () => {
    canvas.width = image.width //设置canvas容器宽度为原图片宽度
    canvas.height = image.height //设置canvas容器高度为原图片高度
    //在canvas画布上绘制图片 ctx.drawImage(图片, x位置, y位置,  图像宽度, 图像高度);
    ctx.drawImage(image, 0, 0, image.width, image.height)
    //设置文本画笔的样式
    ctx.textAlign = 'left' //设置文本对齐方式
    ctx.textBaseline = 'top' //设置文本基线
    // 计算字体大小
    	//图片宽度太大会导致字体太小看不清,宽度太小文字超出显示不全
    let fontSize = image.width / 3 > 12 * 9 ? Math.ceil(image.width / 3 / 9) : 12
    // ctx.font = '14px Microsoft Yahei' //设置文本字体属性
    ctx.font = `${fontSize}px SourceHanSerif` //设置文本字体属性
    ctx.fillStyle = 'rgba(255, 255, 255,0.8)' //设置文本字体颜色
    // 设置文字阴影的颜色为黑色,透明度为20%
    ctx.shadowColor = 'rgba(0, 0, 0, 1)'
    // 将阴影向右移动15px,向上移动10px
    ctx.shadowOffsetX = 2
    ctx.shadowOffsetY = 2
    // 轻微模糊阴影
    ctx.shadowBlur = 5

    //在canvas画布上绘制文字 ctx.fillText(文字内容, x位置, y位置, 文本最大宽度)
    ctx.fillText(
      content,
      image.width - (content.split('').length * fontSize + 10),
      image.height - (fontSize + 10),
      image.width
    ) //14为文字大小
    //把canvas装换为blob对象 方便下载
    canvas.toBlob(blob => {
      // console.log('base64', blob)
      // a标签下载
      const link = document.createElement('a')
      link.style.display = 'none'
      link.href = URL.createObjectURL(blob)
      // 设置下载名称
      link.setAttribute('download', 'test.jpg')
      document.body.appendChild(link)
      link.click()
      // 下载完清除标签
      document.body.removeChild(link)
    })
    //单纯前端展示
       //watermarkImg =img=>{
       		return new Promise((resolve,reject)=>{
       			...
       			 image.onload = () => {
       				let base64 = canvas.toDataURL('image/png') //把canvas转base64输出
       				resove(base64)
       			 }
       			 image.onerror= () => {
       				reject()
       			 }
       		})
       }
  }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值