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的新特性
Sep 05 HTML / CSS
CSS3 特效范例整理
Aug 22 HTML / CSS
CSS3中:nth-child和:nth-of-type的区别深入理解
Mar 10 HTML / CSS
使用CSS3中的calc()属性来以算式表达尺寸数值
Jun 06 HTML / CSS
用纯CSS3实现网页中常见的小箭头
Oct 16 HTML / CSS
CSS3 transforms应用于背景图像的解决方法
Apr 16 HTML / CSS
CSS3 实现飘动的云朵动画
Dec 01 HTML / CSS
一波HTML5 Canvas基础绘图实例代码集合
Feb 28 HTML / CSS
iphoneX 适配客户端H5页面的方法教程
Dec 08 HTML / CSS
关于iframe跨域使用postMessage的实现
Oct 29 HTML / CSS
CSS 文字装饰 text-decoration & text-emphasis 详解
Apr 06 HTML / CSS
从QQtabBar看css命名规范BEM的详细介绍
Aug 07 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
YUI的Tab切换实现代码
2010/04/11 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
layui中table表头样式修改方法
2018/08/15 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
python 自动提交和抓取网页
2009/07/13 Python
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
Python批量转换文件编码格式
2015/05/17 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
图解Python变量与赋值
2018/04/03 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
pandas apply多线程实现代码
2020/08/17 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
职业生涯规划设计步骤
2014/01/12 职场文书
ktv中秋节活动方案
2014/01/30 职场文书
2014年护士长工作总结
2014/11/11 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
拉贝日记观后感
2015/06/05 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏