手摸手教你用canvas实现给图片添加平铺水印的实现


Posted in HTML / CSS onAugust 20, 2019

最近项目中遇到一个需求,需要把一张图片加上平铺的水印

类似这样的效果
 

手摸手教你用canvas实现给图片添加平铺水印的实现
 

首先想到的是用canvas完成这种功能,因为我之前也没有接触过canvas,所以做这个功能的时候,就是一步一步的摸索中学习,过程还是挺nice的,接下来跟我一步步来实现这个功能以及发现一些canvas的坑吧。

因为这个功能需要的都是一些canvas基础的api,也不涉及什么原理性的问题,这里我就直接贴js代码

var img = new Image();
// 因为我项目中的业务是,要把淘宝的图片添加水印,所以这里就放一个淘宝商品的主图
img.src = 'https://gd4.alicdn.com/imgextra/i3/155/O1CN01XKkJqL1D11wYZbeI2_!!155-0-lubanu.jpg_400x400.jpg';
img.onload = () => {
  // 准备canvas环境
  var canvas = document.getElementById("myCanvas");
  var ctx = canvas.getContext("2d");
  // 先把图片绘制到canvas上
  ctx.drawImage(img, 0, 0, 200, 200);
      // 绘制水印到canvas上
      for (let i = 0; i < 20; i++) {
      ctx.rotate((-45 * Math.PI) / 180); // 水印初始偏转角度
      ctx.font = "20px microsoft yahei";
      ctx.fillStyle = "rgba(0,0,0,0.5)";
      ctx.fillText("mmmmmmmmmmmmmmmmmmmmmmm",-300,i * 25);
      ctx.rotate((45 * Math.PI) / 180); // 把水印偏转角度调整为原来的,不然他会一直转
    }

html

<canvas
  height="200"
  id="myCanvas"
  width="200"
>你的浏览器不支持水印,请用谷歌浏览器打开</canvas>

这时候来试一下,结果发现有报错

Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

在谷歌之后,发现这是图片跨域问题导致的,那么如何解决呢?

只需给咱们new出来的img添加一个属性就好了

img.setAttribute("crossorigin", "crossorigin");

于是,js部分new img的代码就变成了

var img = new Image();
// 因为我项目中的业务是,要把淘宝的图片添加水印,所以这里就放一个淘宝商品的主图
img.setAttribute("crossorigin", "crossorigin");// 这句代码是为了解决跨域问题,如果你的图片是自己的,没有跨域问题可以去掉
img.src = 'https://gd4.alicdn.com/imgextra/i3/155/O1CN01XKkJqL1D11wYZbeI2_!!155-0-lubanu.jpg_400x400.jpg';

接下来来看一下我们的成品

手摸手教你用canvas实现给图片添加平铺水印的实现

大功告成。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS心形加载的动画源码的实现
Mar 09 HTML / CSS
HTML5如何适配 iPhone IOS 底部黑条
Mar 09 HTML / CSS
html5音频_动力节点Java学院整理
Aug 22 HTML / CSS
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
Dec 13 HTML / CSS
HTML5重塑Web世界它将如何改变互联网
Dec 17 HTML / CSS
x-ua-compatible content=”IE=7, IE=9″意思理解
Jul 22 HTML / CSS
html5 更新图片颜色示例代码
Jul 29 HTML / CSS
微信html5页面调用第三方位置导航的示例
Mar 14 HTML / CSS
快速实现一个简单的canvas迷宫游戏的示例
Jul 04 HTML / CSS
html5默认气泡修改的代码详解
Mar 13 HTML / CSS
html5实现输入框fixed定位在屏幕最底部兼容性
Jul 03 HTML / CSS
详解CSS开发过程中的20个快速提升技巧
May 21 HTML / CSS
html5 canvas实现给图片添加平铺水印
Aug 20 #HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
Aug 16 #HTML / CSS
HTML5自定义属性的问题分析
Aug 16 #HTML / CSS
HTML5实现视频弹幕功能
Aug 09 #HTML / CSS
Canvas高级路径操作之拖拽对象的实现
Aug 05 #HTML / CSS
Canvas多边形绘制的实现方法
Aug 05 #HTML / CSS
使用canvas压缩图片大小的方法示例
Aug 02 #HTML / CSS
You might like
PHP连接access数据库
2008/03/27 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
jQuery 使用手册(一)
2009/09/23 Javascript
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
Python中title()方法的使用简介
2015/05/20 Python
初步讲解Python中的元组概念
2015/05/21 Python
python抓取网页中图片并保存到本地
2015/12/01 Python
Python格式化输出%s和%d
2018/05/07 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
Python如何安装第三方模块
2020/05/28 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
宿舍打麻将检讨书
2014/01/24 职场文书
担保书格式及范文
2014/04/01 职场文书
大学生社会实践评语
2014/04/25 职场文书
离职报告格式
2014/11/04 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
python pyhs2 的安装操作
2021/04/07 Python
dubbo服务整合zipkin详解
2021/07/26 Java/Android
mysql使用instr达到in(字符串)的效果
2022/04/03 MySQL