当前位置: 首页 > news >正文

什么是cms网站系统番禺人才网招聘网

什么是cms网站系统,番禺人才网招聘网,免费建音乐网站,中山网站制作定制最近写需求,遇到要给图片加水印的需求。 刚开始想的方案是给图片上覆盖一层水印照片,但是这样的话用户直接下载图片水印也会消失。 后来查资料发现用 canvas 就可以给图片加水印,下面是处理过程。 首先我们要确认图片的格式,我们通…

最近写需求,遇到要给图片加水印的需求。 刚开始想的方案是给图片上覆盖一层水印照片,但是这样的话用户直接下载图片水印也会消失。
后来查资料发现用 canvas 就可以给图片加水印,下面是处理过程。

请添加图片描述
首先我们要确认图片的格式,我们通过 input 上传的图片格式一般是 File (File 对象是特殊类型的 Blob)即 Blob 格式。
这样的话,我们需要先把 Blob 文件转成 img 标签,先通过 FileReader 读取文件,通过 reader.readAsDataURL 获得文件 Base 64 编码 URL 地址,拿到 URL 后,生成 img 标签。

1. Blob 文件转成 img 标签

	// blob 文件格式转成 img 标签const blobToImg = (blob) => {return new Promise((resolve, reject) => {const reader = new FileReader()reader.readAsDataURL(blob)reader.onload = () => {let img = new Image()img.src = reader.resultimg.addEventListener('load', () => resolve(img))}})}

这里要注意,如果使用 addEventListener 需要先注册事件监听。

const blobToImg = (blob) => {return new Promise((resolve, reject) => {const reader = new FileReader()reader.addEventListener('load', () => {let img = new Image()img.src = reader.resultimg.addEventListener('load', () => resolve(img))})reader.readAsDataURL(blob)})}

2. img 标签转成 canvas

 // 将img内容绘制到canvas画布imgToCanvas(img) {const canvas = document.createElement('canvas')canvas.width = img.widthcanvas.height = img.heightconst context = canvas.getContext('2d')context.drawImage(img, 0, 0)return canvas}

3. 在 canvas 画布上绘制水印

水印通过 ctx.createPattern(image, repetition) 方法来进行重复绘制,由于 image 参数要是是 img 标签格式或者 canvas 文件格式,所以我们可以让 UI 老师生成一个水印的图片,或者我们用 canvas 自己画一个水印的图片进行复制。

如果我们需要直接生成图片来进行展示,那我们可以用 canvas.toDataURL() 直接从 canvas 生成图片地址。
如果需要生成 Blob 格式传给后端,那我们可以用 canvas.toBlob() 方法从 canvas 生成 Blob 文件格式,传给后端。

    // canvas画布上绘制水印waterMark(canvas) {return new Promise((resolve, reject) => {const ctx = canvas.getContext('2d')// 绘制水印 canvasconst canvasWater = this.drawWaterCanvas('已失效')// 绘制重复的水印ctx.fillStyle = ctx.createPattern(canvasWater, 'repeat')ctx.fillRect(0, 0, canvas.width, canvas.height)// 这里我需要直接展示,所以就直接生成图片地址resolve(canvas.toDataURL())})},drawWaterCanvas(str) {const canvasWater = document.createElement('canvas')canvasWater.width = 400canvasWater.height = 400const ctxWater = canvasWater.getContext('2d')ctxWater.textAlign = 'left'ctxWater.textBaseline = 'middle'ctxWater.font = '32px Microsoft Yahei'ctxWater.fillStyle = 'rgba(0, 0, 0, 0.3)'ctxWater.rotate((-20 * Math.PI) / 180)ctxWater.fillText(str, 10, 80)return canvasWater}

4. VUE 中实际应用

<template><div><img :src="imgUrl" alt="" /></div>
</template><script>
import loppy from './assets/loppy.jpg'export default {data() {return {imgUrl: ''}},created() {const img = new Image()img.src = loppyimg.onload = async () => {const canvas = this.imgToCanvas(img)const url = await this.waterMark(canvas)this.imgUrl = url}},methods: {// 将img内容绘制到canvas画布imgToCanvas(img) {const canvas = document.createElement('canvas')canvas.width = img.widthcanvas.height = img.heightconst context = canvas.getContext('2d')context.drawImage(img, 0, 0)return canvas},// canvas画布上绘制水印并转换为blob对象waterMark(canvas) {return new Promise((resolve) => {const ctx = canvas.getContext('2d')// 绘制水印 canvasconst canvasWater = this.drawWaterCanvas('图片已失效')// 绘制重复的水印ctx.fillStyle = ctx.createPattern(canvasWater, 'repeat')ctx.fillRect(0, 0, canvas.width, canvas.height)resolve(canvas.toDataURL())})},drawWaterCanvas(str) {const canvasWater = document.createElement('canvas')canvasWater.width = 500canvasWater.height = 500const ctxWater = canvasWater.getContext('2d')ctxWater.textAlign = 'left'ctxWater.textBaseline = 'middle'ctxWater.font = '32px Microsoft Yahei'ctxWater.fillStyle = 'rgba(0, 0, 0, 0.3)'ctxWater.rotate((-20 * Math.PI) / 180)ctxWater.fillText(str, 10, 200)ctxWater.fillText(new Date().toLocaleString(), 10, 300)return canvasWater}}
}
</script><style lang="scss" scoped>
img {width: 200px;height: 200px;
}
</style>

在这里插入图片描述

http://www.yayakq.cn/news/483981/

相关文章:

  • 湘潭市 网站建设安装网站模版视频教程
  • 某鲜花网站的数据库建设cnn头条新闻
  • 百姓网网站建设免费发广告的软件有哪些
  • 芜湖做网站多少钱wordpress 安全狗
  • 公司网站用个人备案 2018建e网下载
  • 甘德县公司网站建设湖南做网站
  • 自己做网站的意义用户等待网站速度
  • 百度申请完域名怎么建设网站环保工程网站建设价格
  • 网站建设有哪些步骤百度网站收录提交入口
  • 知名营销网站中国住房和城乡建设局官网
  • 国外比较好的资源网站百度 指数
  • seo怎么做自己的网站网站建设后期需要做什么
  • 福田做网站哪家专业新手怎么做电商卖农产品
  • 网站开发技巧站长工具搜索
  • 成都微网站开发优普道建筑网校
  • 搜书网站 怎么做专业做家具的网站有哪些
  • 用模板怎么做网站怎么做电商创业
  • icp备案 网站备案广西壮族自治区绕口令
  • 做网站要写多少行代码网络营销策划的基本原则是什么
  • 网站建设服务版权归谁页面设计专业
  • 临沂网络网站建设成都营销策划公司排行榜
  • 贵阳官方网站c2c平台购物流程
  • 做啪啪网站网站建设 部署与发布 答案
  • 银川兴庆建设局网站网站平台搭建技术
  • 网站图片上的分享怎么做网站开发的调研内容
  • 怎样免费建个人网站seo网站页面诊断
  • 网站开发客户提供素材网站建设产品展示型的
  • 免费手机网站申请营销型网站设计内容
  • 免费网站建站平台哪个跨境电商网站做的最好
  • 本地做网站教程台海最新消息24小时更新