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

网站建设案例百度云通用ppt模板免费

网站建设案例百度云,通用ppt模板免费,国内网站建设公司排名,东莞市建设中心最近写需求,遇到要给图片加水印的需求。 刚开始想的方案是给图片上覆盖一层水印照片,但是这样的话用户直接下载图片水印也会消失。 后来查资料发现用 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/583235/

相关文章:

  • dede我的网站wordpress做手机网站
  • 厦门+外贸公司做网站网站广东省备案系统
  • 百度网站模板免费下载英文营销网站 知乎
  • 成都微信微网站建设wordpress菜单怎么用
  • 服务提供网站亚马逊 怎么做国外网站
  • 牡丹区住房和城乡建设局网站简单的招聘网站怎么做
  • 河北云网站建设ps海报制作教程步骤的网站
  • 成都网站成都网站制作公司ucenter整合wordpress
  • 家政网站制作沈阳定制网络机箱机柜
  • 西安企业建站排名怎样做一家迷你的特卖网站
  • 樟木头网站建设现在的网站建设用什么语言
  • 网站 宕机 优化手机网站图片自适应代码
  • WordPress网页嵌入插件宁波seo是什么意思
  • 企业服务类网站做外贸有哪些免费的网站有哪些
  • html5 微信网站主流开发技术标准网页设计工作怎么样
  • 亚马逊站外推广网站舟山网站建设流程
  • 网站seo检测工具阜阳哪里有做网站的
  • 连锁酒店的网站建设快速建站哪里好
  • 网站站点地图设计ps个人主页设计模板
  • 国内设计网站公司河南双师培训网站
  • 六安网站建设电话公司是做小程序还是做网站
  • 河南网站建设华企祥云敬请期待造句
  • 网站建设报销属于什么会计科目php做网站用什么软件好
  • 电话网站源码做网站视频背景
  • 服务器搭建网站用什么系统三点水网站建设合同
  • 公司网站建设方案书怎么写iis如何设置服务器上网站空间大小
  • 嘉定做网站外贸搜索网站
  • wordpress多站点多域名插件邯郸网络营销和网络推广
  • 维护网站建设空间出租php和wordpress
  • 做响应式网站的物流佛山制作