手摸手教你用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进行截取替代js的substring
Sep 02 HTML / CSS
使用css3背景渐变中的透明度来设置不同颜色的背景渐变
Mar 31 HTML / CSS
CSS3中设置3D变形的transform-style属性详解
May 23 HTML / CSS
CSS3绘制六边形的简单实现
Aug 25 HTML / CSS
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
Jan 06 HTML / CSS
网页中的电话号码如何实现一键直呼效果_附示例
Mar 15 HTML / CSS
HTML5实现的震撼3D焦点图动画的示例代码
Sep 26 HTML / CSS
HTML5 embed 标签使用方法介绍
Aug 13 HTML / CSS
HTML5中div、article、section的区别及使用介绍
Aug 14 HTML / CSS
让IE下支持Html5的placeholder属性的插件
Sep 02 HTML / CSS
用HTML5中的Canvas结合公式绘制粒子运动的教程
May 08 HTML / CSS
CSS控制继承中的height能变为可继承吗
Jun 10 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
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
在Django的通用视图中处理Context的方法
2015/07/21 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
Python 自动化表单提交实例代码
2017/06/08 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
医院护士见习期自我鉴定
2014/04/10 职场文书
2014年征兵标语
2014/06/20 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
食品卫生管理制度
2015/08/06 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
python 实现图片特效处理
2022/04/03 Python