手摸手教你用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 动画效果的总结详解
May 09 HTML / CSS
css3实现的多级渐变下拉菜单导航效果代码
Aug 31 HTML / CSS
HTMl5的存储方式sessionStorage和localStorage详解
Mar 18 HTML / CSS
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
Jan 01 HTML / CSS
利用HTML5 Canvas制作一个简单的打飞机游戏
May 11 HTML / CSS
Html5实现文件异步上传功能
May 19 HTML / CSS
html5实现滑块功能之type=&quot;range&quot;属性
Feb 18 HTML / CSS
HTML5给汉字加拼音收起展开组件的实现代码
Apr 08 HTML / CSS
HTML5录音实践总结(Preact)
May 07 HTML / CSS
HTML+CSS+JavaScript实现图片3D展览的示例代码
Oct 12 HTML / CSS
CSS3 制作的悬停缩放特效
Apr 13 HTML / CSS
CSS布局之浮动(float)和定位(position)属性的区别
Sep 25 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实现的短网址算法分享
2014/06/20 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
javascript 学习之旅 (3)
2009/02/05 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
JS+html5制作简单音乐播放器
2020/09/13 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
js匿名函数使用&amp;传参(实例)
2017/09/08 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
js中的reduce()函数讲解
2019/01/18 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
python 生成目录树及显示文件大小的代码
2009/07/23 Python
python多重继承实例
2014/10/11 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
物业保安岗位职责
2014/07/02 职场文书
2014年组织部工作总结
2014/11/14 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
财产分割协议书
2016/03/22 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript