手摸手教你用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 相关文章推荐
CSS3 3D位移translate效果实例介绍
May 03 HTML / CSS
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
Aug 18 HTML / CSS
纯css3显示隐藏一个div特效的具体实现
Feb 10 HTML / CSS
详解css3中的伪类before和after常见用法
Nov 17 HTML / CSS
html5使用Canvas绘图的使用方法
Nov 21 HTML / CSS
HTML5新控件之日期和时间选择输入的实现代码
Sep 13 HTML / CSS
深入解析HTML5 Canvas控制图形矩阵变换的方法
Mar 24 HTML / CSS
浅析HTML5中的 History 模式
Jun 22 HTML / CSS
HTML5 weui使用笔记
Nov 21 HTML / CSS
CSS3实现的水平标题菜单
Apr 14 HTML / CSS
从QQtabBar看css命名规范BEM的详细介绍
Aug 07 HTML / CSS
如何解决flex文本溢出问题小结
Jul 15 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 mysql Errcode: 28 终极解决方法
2009/07/01 PHP
获取远程文件大小的php函数
2010/01/11 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
实例解析Array和String方法
2016/12/14 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
Python下opencv图像阈值处理的使用笔记
2019/08/04 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
初中体育教学反思
2014/01/14 职场文书
网络技术专业求职信
2014/02/18 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
一年级小学生评语大全
2014/12/25 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
催款通知书范文
2015/04/17 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
mysql自增长id用完了该怎么办
2022/02/12 MySQL
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle