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美化表单控件全集
Jun 29 HTML / CSS
IE兼容css3圆角的实现代码
Jul 21 HTML / CSS
css3 border旋转时的动画应用
Jan 22 HTML / CSS
用CSS3实现无限循环的无缝滚动的示例代码
Nov 01 HTML / CSS
Html5页面在微信端的分享的实现方法
Aug 30 HTML / CSS
Canvas 文本转粒子效果的实现代码
Feb 14 HTML / CSS
HTML5新增的表单元素和属性实例解析
Jul 07 HTML / CSS
使用分层画布来优化HTML5渲染的教程
May 08 HTML / CSS
使用HTML5做的导航条详细步骤
Oct 19 HTML / CSS
html+css合并表格边框的示例代码
Mar 31 HTML / CSS
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
May 10 HTML / CSS
CSS作用域(样式分割)的使用汇总
Nov 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
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
Python文件操作类操作实例详解
2014/07/11 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python爬虫请求头设置代码
2020/07/28 Python
爷爷追悼会答谢词
2014/01/24 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
win10如何快速切换窗口 win10切换窗口快捷键分享
2022/07/23 数码科技