最近项目中遇到一个需求,需要把一张图片加上平铺的水印
类似这样的效果
首先想到的是用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实现给图片添加平铺水印,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
js 实现 bind 的这五层,你在第几层? 最近在帮朋友复习 JS 相关的基础知识,遇...
1.毕业那天,我以为我离开了地狱,其实我是离开了天堂。 2.悄悄进你空间,只有...
先点赞再看,养成好习惯 前言 这两天在另一个社区看到了一个关于 Tomcat 的提问...
各位参赛选手: 2020 腾讯 Light.公益创新挑战赛自报名开启以来,反响热烈,因参...
1 概述 本文主要讲述了 ArrayList 与 LinkedList 的相同以及不同之处,以及两者...
有没有发现,每隔几年总会有一些火热的前沿词汇出现在我们面前,比如:云原生、...
使用技术 itext.jar : 将byte文件输入流转换为图片,pdf等 html2canvas.js :将h...
Dreamweaver网页中的banner图片需要切换,我们可以添加按钮来切换图片,下面我们...
1.怎知我用一转身离开的你,竟要用一辈子来忘记。 2.有的故事,从一开始,就注...
设计网页的时候,想要添加导航按钮,该怎么制作导航按钮呢?下面我们就来看看使...