html5 canvas实现给图片添加平铺水印


Posted in HTML / CSS onAugust 20, 2019

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

类似这样的效果

html5 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';

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

html5 canvas实现给图片添加平铺水印 

总结

以上所述是小编给大家介绍的html5 canvas实现给图片添加平铺水印,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

HTML / CSS 相关文章推荐
css3模拟jq点击事件的实例代码
Jul 06 HTML / CSS
CSS3实现任意图片lowpoly动画效果实例
May 11 HTML / CSS
使用HTML5和CSS3表单验证功能
May 05 HTML / CSS
CSS3教程(1):什么是CSS3
Apr 02 HTML / CSS
CSS3实现银灰色动画效果的导航菜单代码
Sep 01 HTML / CSS
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
Aug 25 HTML / CSS
CSS3实现缺角矩形,折角矩形以及缺角边框
Dec 20 HTML / CSS
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
Feb 28 HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
Oct 11 HTML / CSS
手摸手教你用canvas实现给图片添加平铺水印的实现
Aug 20 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
Jan 03 HTML / CSS
关于HTML5+ API plusready的兼容问题
Nov 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
HTML5实现移动端弹幕动画效果
Aug 01 #HTML / CSS
You might like
用php实现批量查询清除一句话后门的代码
2008/01/20 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
类之Prototype.js学习
2007/06/13 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
纯js模仿windows系统日历
2017/02/04 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
AngularJS 中的数据源的循环输出
2017/10/12 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
使用微信SDK自定义分享的方法
2019/07/03 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
python简单的函数定义和用法实例
2015/05/07 Python
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
对python中Json与object转化的方法详解
2018/12/31 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Python父目录、子目录的相互调用方法
2019/02/16 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
考生诚信考试承诺书
2014/05/23 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
2014年医院工作总结
2014/11/20 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
python脚本框架webpy模板控制结构
2021/11/20 Python