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背景图片透明叠加属性cross-fade简介及用法实例
Jan 08 HTML / CSS
CSS3 Flexbox中flex-shrink属性的用法示例介绍
Dec 30 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
Mar 16 HTML / CSS
老生常谈CSS中的长度单位
Jun 27 HTML / CSS
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
Apr 22 HTML / CSS
html5教程实现Photoshop渐变色效果
Dec 04 HTML / CSS
HTML5 canvas画图并保存成图片的jcanvas插件
Jan 17 HTML / CSS
canvas环形倒计时组件的示例代码
Jun 14 HTML / CSS
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
Apr 10 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
May 19 HTML / CSS
HTML5实现应用程序缓存(Application Cache)
Jun 16 HTML / CSS
h5封装下拉刷新
Aug 25 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
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
php自定义session示例分享
2014/04/22 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
浅谈JavaScript 标准对象
2016/06/02 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
vue使用i18n实现国际化的方法详解
2019/09/05 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
Python实现查询某个目录下修改时间最新的文件示例
2018/08/29 Python
python配置grpc环境
2019/01/01 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
Python发展史及网络爬虫
2019/06/19 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
Python模块常用四种安装方式
2020/10/20 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
2015年测量员工作总结
2015/05/23 职场文书
体育教师研修感悟
2015/11/18 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL