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弹性伸缩布局之box布局
Jul 12 HTML / CSS
详解CSS的border边框属性及其在CSS3中的新特性
May 10 HTML / CSS
使用CSS禁止textarea调整大小功能的方法
Mar 13 HTML / CSS
CSS实现半透明边框与多重边框的场景分析
Nov 13 HTML / CSS
详解css3 flex弹性盒自动铺满写法
Sep 17 HTML / CSS
html5 乒乓球(碰撞检测)实例二
Jul 25 HTML / CSS
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
Apr 10 HTML / CSS
一款利用html5和css3动画排列人物头像的实例演示
Dec 05 HTML / CSS
HTML5实现文件断点续传的方法
Jan 04 HTML / CSS
canvas中普通动效与粒子动效的实现代码示例
Jan 03 HTML / CSS
详解Canvas实用库Fabric.js使用手册
Jan 07 HTML / CSS
使用Html5多媒体实现微信语音功能
Jul 26 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知识收集
2012/08/20 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
JQuery autocomplete 使用手册
2010/04/01 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
初步剖析C语言编程中的结构体
2016/01/16 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
详解python变量与数据类型
2020/08/25 Python
Python json解析库jsonpath原理及使用示例
2020/11/25 Python
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
自荐信格式技巧有哪些呢
2013/11/19 职场文书
梅花魂教学反思
2014/04/25 职场文书
组工干部演讲稿
2014/09/02 职场文书
出生医学证明书
2014/09/15 职场文书
2019销售早会主持词
2019/06/27 职场文书
Java基础之this关键字的使用
2021/06/30 Java/Android
vue中 this.$set的使用详解
2021/11/17 Vue.js