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 相关文章推荐
常用的四种CSS透明属性介绍
Apr 12 HTML / CSS
使用css3实现的tab选项卡代码分享
Dec 09 HTML / CSS
CSS Grid布局教程之网格单元格布局
Dec 30 HTML / CSS
CSS3绘制圆角矩形的简单示例
Sep 28 HTML / CSS
几个CSS3的flex弹性盒模型布局的简单例子演示
May 12 HTML / CSS
CSS3中的Media Queries学习笔记
May 23 HTML / CSS
浅谈CSS3特性查询(Feature Query: @supports)功能简介
Jul 31 HTML / CSS
详解如何用canvas画一个微笑的表情
Mar 14 HTML / CSS
html5 CSS过度-webkit-transition使用介绍
Jul 02 HTML / CSS
HTML5 拖放(Drag 和 Drop)详解与实例代码
Sep 14 HTML / CSS
前端实现打印图像功能
Aug 27 HTML / CSS
CSS实现鼠标悬浮动画特效
May 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
第十三节--对象串行化
2006/11/16 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
php命令行写shell实例详解
2018/07/19 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
JavaScript 题型问答有答案参考
2010/02/17 Javascript
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
详解bootstrap导航栏.nav与.navbar区别
2017/11/23 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
Python基本数据类型详细介绍
2014/03/11 Python
python求pi的方法
2014/10/08 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
会计专业大学生求职信范文
2014/01/28 职场文书
标准自荐信范文
2014/01/29 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python