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

淮北建设工程质量安全站网站天津滨海新区地图全图

淮北建设工程质量安全站网站,天津滨海新区地图全图,官网网站设计,长沙做网站建设公司最近写需求#xff0c;遇到要给图片加水印的需求。 刚开始想的方案是给图片上覆盖一层水印照片#xff0c;但是这样的话用户直接下载图片水印也会消失。 后来查资料发现用 canvas 就可以给图片加水印#xff0c;下面是处理过程。 首先我们要确认图片的格式#xff0c;我们通… 最近写需求遇到要给图片加水印的需求。 刚开始想的方案是给图片上覆盖一层水印照片但是这样的话用户直接下载图片水印也会消失。 后来查资料发现用 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 leftctxWater.textBaseline middlectxWater.font 32px Microsoft YaheictxWater.fillStyle rgba(0, 0, 0, 0.3)ctxWater.rotate((-20 * Math.PI) / 180)ctxWater.fillText(str, 10, 80)return canvasWater}4. VUE 中实际应用 templatedivimg :srcimgUrl alt //div /templatescript import loppy from ./assets/loppy.jpgexport 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 leftctxWater.textBaseline middlectxWater.font 32px Microsoft YaheictxWater.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}} } /scriptstyle langscss scoped img {width: 200px;height: 200px; } /style
http://www.huolong8.cn/news/194508/

相关文章:

  • 做网站需要什么特色dw如何制作表格网页
  • 更改wordpress主题字体颜色网站打开慢如何优化
  • php asp jsp 网站赣州优化公司
  • 查询数据的网站怎么做东莞做个网站
  • 优秀网页设计导航seo职业培训学校
  • php网站服务器怎么来开发三味是啥
  • xp 做网站服务器吗福田公司简介
  • 织梦网站密码忘记了盱眙网站建设
  • 建设网站要多少页面中国住房和城乡建设部网站首页
  • 做融资的网站有哪些深圳网站建设网牛天下
  • 成都市做网站公司产品是做网站
  • 昌平区手机网站制作服务汉中中药材初加工平台
  • 英国人买服务器网站网站建设情况检查报告
  • 经销商自己做网站做h5哪个网站好用
  • 域名没到期 网站打不开晋州专业网站建设
  • 门户网站制作定做教学网站在线自测功能怎么做
  • 网站包括哪些内容平顶山网站制作哪家公司好
  • 品牌网站设计首选南阳优化网站排名
  • 网站地图 制作大连建设网站公司
  • 做淘宝团购的网站企业网站建设费用财务处理
  • 电子商务网站建设ppt模板asp.net网站开发使用到的技术
  • 上海营销型网站建设费用wordpress伪装插件
  • 西青做网站公司wordpress怎么做弹窗
  • 赣榆网站制作珠海商城网站制作
  • 网站建设服务器介绍图片广州网络推广培训机构
  • 广州市移动网站建设服务公司免费生成ppt的网站
  • 网站生成app工具网络架构师证书
  • 安徽省建设工程网站网站开发样例
  • 贵阳做网站的wordpress网站备份还原
  • 前端做任务的网站山西长治做网站公司