web图片加水印

news/2024/7/19 13:44:56 标签: node, 加水印, js, canvas

在前端给图片加水印的方法有很多种:

法一:js+canvas,使用H5新增元素canvas(画布)加水印

使用此方法,用户可以在页面上自定义水印内容

代码如下

<body>
	<canvas id="shuiyinTest" width="500" height="500"></canvas>
        <!--画布,图片放在此处-->
	<div>
	    <input id="shuiyinText" value="" type="text" />
	    <button id="shuiyinBtn" type="button"> 点击添加水印</button>
	</div>
</body>
<script>
     //加水印方法,参数1:画布;参数2:图片
     function shuiyin(canvasid, imgurl) {
         var img = new Image;//定义一个图片
         img.src = imgurl;//获取图片
         img.onload = function() {//图片被加载到页面时执行
             var canvas = document.getElementById(canvasid);//通过id寻找canvas元素
             var ctx = canvas.getContext("2d");//创建context对象
             ctx.drawImage(img, 0, 0);//将图片放到画布上,从左上角(0,0)开始
             ctx.font = "14px 微软雅黑";//水印的字号,字体
             ctx.fillStyle = "rgba(252,255,255,0.8)"; //水印的颜色
             //按钮被点击时执行
            document.getElementById("shuiyinBtn").onclick = function() {
                //获取用户输入的值
	        var addtext = document.getElementById("shuiyinText").value;
                ctx.fillText(addtext, 10, 50); //选择位置,添加水印
            }
         }
     }
     //执行函数,传入画布id和图片
     shuiyin("shuiyinTest", "source.png");
</script>

页面效果如下:


法二:node,使用node.js给图片加水印

此方法类似于将一个图片叠加到另一个图片上。

 1)准备工作:

       首先,确保你本地已经安装好了node环境。

       然后,我们进行图像编辑操作需要用到一个Node.js的库:images。这个库的地址是:https://github.com/zhangyuanwei/node-images,作者定义它为 “Node.js轻量级跨平台图像编解码库” ,并提供了一系列接口。

      我们要做的首先是安装images库:打开命令行并定位到项目所在处,并输入代码如下:

 npm install images

项目文件夹结构如下:

其中node_modules中包含了下载的images库;jiashuiyin.js中是主要代码;source.png为原图片;water_logo.png为水印内容。


2)代码:

jiashuiyin.js中的代码如下:

var images = require('images');
var path = require('path');
var watermarkImg = images('water_logo.png');
var sourceImg = images('source.png');
// 比如放置在右下角,先获取原图的尺寸和水印图片尺寸
var sWidth = sourceImg.width();
var sHeight = sourceImg.height();
var wmWidth = watermarkImg.width();
var wmHeight = watermarkImg.height();
images(sourceImg)
// 设置绘制的坐标位置,右下角距离 40px
.draw(watermarkImg, sWidth - wmWidth - 40, sHeight - wmHeight - 40)
// 保存格式会自动识别
.save('saveimg.png');

3)运行jiashuiyin.js

在此项目文件夹处打开命令行,输入node jiashuiyin.js;回车。此时,文件夹中会多一个saveimg.png图片,此图片就是加水印后的图片。

注:本人为JS实习生一枚,不断学习,不断进步,欢迎各位前辈批评指教。

 


http://www.niftyadmin.cn/n/875711.html

相关文章

CSS常用样式总结

1、一行文字超出的使用...展示 display: inline-block; // 转成行内块 overflow: hidden; width: 100px; // 宽度必设 word-break: keep-all; white-space: nowrap; // 一行展示 text-overflow: ellipsis; //溢出变成... 2、a标签 去掉下划线 text-decoration:none;

微信小程序自定义封装顶部导航栏

微信小程序自定义封装顶部导航栏&#xff08;自定义返回界面、动态设置标题&#xff09; 微信小程序官方的navigationBar只能设置颜色&#xff0c;字体大小&#xff0c;但是实际开发中多层页面嵌套则需要我们有返回上一级页面或者返回指定页面的功能&#xff0c;这个时候官方提…

Vue项目导出功能、带token导出Excel

在vue后台管理项目中&#xff0c;目前我常用的就两种导出方式 一种是不需要携带token的&#xff0c;直接调用后台的接口&#xff0c;携带需要传递参数就行&#xff0c;具体实现代码如下&#xff1a; 在main.js封装指令 let baseDownloadUrl http://xxxxxxx:8080 // 域名 co…

Vue a标签实现点击下载,下载图片、txt文件,不是直接打开的方式

前段时间在项目中遇到文件需要下载&#xff0c;直接拿出了之前封装的下载指令&#xff0c;在用的时候发现在下载jpg、txt文件时&#xff0c;并不会直接下载&#xff0c;而是会在浏览器中打开文件&#xff0c;即使给a标签添加了download 属性&#xff0c;也无济于事。 我先把之前…

uni-app实现列表的上拉加载,下拉刷新、回到顶部功能

在使用uni-app做app和小程序时&#xff0c;经常会遇到一些列表&#xff0c;这个时候就需要列表能够实现上拉加载更多、下拉刷新的功能&#xff0c;具体效果如下&#xff1a; 此功能比较简单&#xff0c;就不过多介绍了直上代码&#xff1a; HTML部分 // 活动列表<view c…

nodejs+nginx获取真实ip,解决获取ip为127.0.0.1的问题

nodejsnginx获取真实ip,解决获取ip为127.0.0.1的问题 访问互联网上的服务时&#xff0c;大多数时&#xff0c;客户端并不是直接访问到服务端的&#xff0c;而是客户端首先请求到反向代理&#xff0c;反向代理再转发到服务端实现服务访问&#xff0c;通过反向代理实现路由/负载…

react监听页面滚动事件:window.addEventListener的scroll无效

react监听页面滚动事件&#xff1a;window.addEventListener的scroll无效 在react项目中需要通过监听页面滚动高度&#xff0c;控制页面样式动态展示&#xff0c;所以在网上找了以后其他案例发现监听无效&#xff0c;代码如下&#xff1a; //在componentDidMount&#xff0c;…

基于vue的图片剪裁工具vue-croppe

基于vue的图片剪裁工具vue-croppe 安装 // npm安装 npm install --save vue-croppa // yarn 安装 yarn add vue-croppa使用 引入插件 两种引用方式 // 全局注册 main.js import VueCropper from vue-cropper Vue.use(VueCropper)// 组件内单独使用 userAvatar.vue import { …