手摸手教你用canvas实现给图片添加平铺水印的实现


Posted in HTML / CSS onAugust 20, 2019

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

类似这样的效果
 

手摸手教你用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';

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

手摸手教你用canvas实现给图片添加平铺水印的实现

大功告成。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
使用 css3 transform 属性来变换背景图的方法
May 07 HTML / CSS
CSS3对背景图片的裁剪及尺寸和位置的设定方法
Mar 07 HTML / CSS
CSS3的常见transformation图形变化用法小结
May 13 HTML / CSS
浅谈css3中calc在less编译时被计算的解决办法
Dec 04 HTML / CSS
CSS3实现缺角矩形,折角矩形以及缺角边框
Dec 20 HTML / CSS
html5 跨文档消息传输示例探讨
Apr 01 HTML / CSS
HTML5地理定位实例
Oct 15 HTML / CSS
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
Nov 05 HTML / CSS
详解HTML5中rel属性的prefetch预加载功能使用
May 06 HTML / CSS
浅析HTML5:'data-'属性的作用
Jan 23 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
Jul 26 HTML / CSS
Html5+CSS3+EL表达式问题小结
Dec 19 HTML / CSS
html5 canvas实现给图片添加平铺水印
Aug 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
You might like
Search Engine Friendly的URL设计
2006/10/09 PHP
PHP伪静态页面函数附使用方法
2008/06/20 PHP
php miniBB中文乱码问题解决方法
2008/11/25 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
php中使用sftp教程
2015/03/30 PHP
php实现将任意进制数转换成10进制的方法
2015/04/17 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
js过滤HTML标签以及空格的思路及代码
2013/05/24 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
Node.js模块加载详解
2014/08/16 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
24行JavaScript代码实现Redux的方法实例
2019/11/17 Javascript
Python中的作用域规则详解
2015/01/30 Python
Python中方法链的使用方法
2016/02/23 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
python:动态路由的Flask程序代码
2019/11/22 Python
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
2014年社区庆元旦活动方案
2014/03/08 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
初中信息技术教学计划
2015/01/22 职场文书
python中的None与NULL用法说明
2021/05/25 Python