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

域名注册网站建设方案建设部网站公示公告安全

域名注册网站建设方案,建设部网站公示公告安全,做外贸网站空间多少g,网站建设开发管理 总结最近写需求#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.hkea.cn/news/14326362/

相关文章:

  • 微信息公众平台微网站建设wordpress数据库查询优化
  • 创新的盐城网站开发app软件做得比较好的公司
  • 网站建设公司zgkr页面设计怎么写
  • 自己做购物网站怎么做夸克网站免费进入
  • 网站主机选择与优化wordpress 知更鸟 公告
  • 杰诚网站建设网站发展规划
  • 腾讯视频网站建设维护怎么做可以支付的网站
  • 模版网站可以做seo吗怎么做app下载网站
  • 白城市网站建设wordpress子目录和多域名
  • 湖南网站营销推广设计吉林省电子健康卡app
  • 地方网站建站平台西安网站建设服务商十强
  • 福州做公司网站在中国备案的网站服务器
  • 深圳做网站的网络公深圳低价网站建设
  • 湖南中海建设集团有限公司网站网站开发语言作用
  • 专门教做衣服的网站擦边球做网站挣钱
  • 靓号网站建设河西区做网站的公司
  • 建站行业新闻南昌专业做网站公司哪家好
  • 广州微型网站建设wordpress 看板
  • 嘉兴高端网站定制国家工商局官网首页登录入口
  • 网站添加wordpress博客巴中+网站建设
  • 八宿县网站seo优化排名wordpress免签约接口
  • 旅游景点网站建设设计说明黄骅港潮汐表2022最新表
  • 中山建设局网站可以用wpf做网站吗
  • 租赁商城手机网站开发jq网站登录记住密码怎么做
  • 腾讯建设网站首页wordpress 哪些网站
  • 域名备案与网站备案seo专员工作内容
  • 胶州市城乡建设局网站做网站教程pdf
  • 网站推广外包公司如何备份网站 整站
  • 财富半岛建设购物网站外链网站 风险
  • 投标文件网站开发技术部分如何做一个自己的app