手摸手教你用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实现闪烁动画效果的方法
Feb 09 HTML / CSS
CSS3制作炫酷的自定义发光文字
Mar 28 HTML / CSS
纯CSS3制作的鼠标悬停时边框旋转
Jan 03 HTML / CSS
10分钟入门CSS3 Animation
Dec 25 HTML / CSS
HTML5的Geolocation地理位置定位API使用教程
May 12 HTML / CSS
5分钟弄清楚html5的drag and drop(小结)
Apr 10 HTML / CSS
基于html5 DeviceOrientation 实现微信摇一摇功能
Sep 25 HTML / CSS
详解如何通过H5(浏览器/WebView/其他)唤起本地app
Dec 11 HTML / CSS
HTML5新增form控件和表单属性实例代码详解
May 15 HTML / CSS
使用HTML5加载音频和视频的实现代码
Nov 30 HTML / CSS
CSS 还能这样玩?奇思妙想渐变的艺术
Apr 27 HTML / CSS
CSS 一行代码实现头像与国旗的融合
Oct 24 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多个版本的分析解释
2011/07/21 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
教你用十行node.js代码读取docx的文本
2017/03/08 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
ES6 系列之 Generator 的自动执行的方法示例
2018/10/19 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
tensorflow 输出权重到csv或txt的实例
2018/06/14 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
自荐书4要点
2014/01/25 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
初中军训感想
2015/08/07 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript