JS模拟实现图片添加水印功能
JS模拟实现图片添加水印功能
========================================================
今天看到网友发帖求助如果在图片上自动添加水印的功能,于是,俺想一下如果仅仅结果输出效果类似的水印效果,那JS应该可以模拟实现;于是动手写一下,第一次发博文,呵呵...有点陌生,简单介绍一下。
1,原理:建立一个半透明的层,层里面放置一个作为水印的图片,再把这个层放到需要添加水印的图片某个位置上即可,效果如图中右下角带边框的图片;
2,辅助函数
function $(id){ //对象的选取
return "string" == typeof(id) ? document.getElementById(id) : id ;
}
function trim(str){ //去两边空格
return str.replace(/^/s*|/s*$/g,"");
}
3,模拟水印的核心函数
function setWatermark(objImg,watermarkPic,opacityValue){
var oimg=objImg;
var wmPic=trim(watermarkPic);
if(!oimg || wmPic == "") return;
var opa=parseInt(opacityValue,10);
//关于水印图片的宽,高,放的位置和边距
var wmPicPos="rightBottom";
var wmPicW=80;
var wmPicH=45;
var wmPicMargin=10; //距离边框问题可以修改这里
//源图片,即要添加水印的图片的相关宽高,位置信息
var oimgW,oimgH,oimgLeft,oimgTop;
try{
oimgLeft=parseInt(oimg.offsetLeft,10);
oimgTop=parseInt(oimg.offsetTop,10);
oimgW=parseInt(oimg.width,10);
oimgH=parseInt(oimg.height,10);
}catch(e){}
//建立一个作为水印图片对象
var newImg=document.createElement("IMG");
newImg.src=wmPic;
newImg.border="0";
newImg.width=wmPicW;
newImg.height=wmPicH;
//建立一个存放水印图片的指定透明度的赠,然后加入水印图片
var newDiv=document.createElement("DIV");
newDiv.style.border="1px dotted red"; //不用边框则注释掉这行
newDiv.style.position="absolute";
newDiv.style.filter="alpha(opacity="+opa+")";
newDiv.style.MozOpacity=opa/100;
//层放的位置计算,最后添加到document中
newDiv.style.left=(oimgLeft + oimgW - wmPicW - wmPicMargin)+"px";
newDiv.style.top=(oimgTop + oimgH - wmPicH - wmPicMargin)+"px";
newDiv.appendChild(newImg);
var docBody=document.getElementsByTagName("body")[0];
if(!docBody.id) docBody.id="myDocBody";
var docBodyID=docBody.id;
$(docBodyID).appendChild(newDiv);
newImg=null;
newDiv=null;
}
//使用例子
<img οnlοad="javascript:setWatermark(this,'http://www.xxx.com/images/mylogo.gif',60)">
完整例子如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JS模拟实现在图片上添加水印效果</title>
</head>
<style type="text/css">
*{font-family:verdana; font-size:12px;}
</style>
<script language="javascript" type="text/javascript">
/*
@Name: JSWatermark
@Function: make a watermark for image with picture by JavaScript
@author:shenzhenNBA
@version: 1.0.0
@create date: 2010-08-31
*/
function $(id){
return "string" == typeof(id) ? document.getElementById(id) : id ;
}
function trim(str){
return str.replace(/^/s*|/s*$/g,"");
}
function setWatermark(objImg,watermarkPic,opacityValue){
var oimg=objImg;
var wmPic=trim(watermarkPic);
if(!oimg || wmPic == "") return;
var opa=parseInt(opacityValue,10);
var wmPicPos="rightBottom";
var wmPicW=80;
var wmPicH=45;
var wmPicMargin=10; //距离边框问题可以修改这里
var oimgW,oimgH,oimgLeft,oimgTop;
try{
oimgLeft=parseInt(oimg.offsetLeft,10);
oimgTop=parseInt(oimg.offsetTop,10);
oimgW=parseInt(oimg.width,10);
oimgH=parseInt(oimg.height,10);
}catch(e){}
var newImg=document.createElement("IMG");
newImg.src=wmPic;
newImg.border="0";
newImg.width=wmPicW;
newImg.height=wmPicH;
var newDiv=document.createElement("DIV");
newDiv.style.border="1px dotted red"; //不用边框则注释掉这行
newDiv.style.position="absolute";
newDiv.style.filter="alpha(opacity="+opa+")";
newDiv.style.MozOpacity=opa/100;
newDiv.style.left=(oimgLeft + oimgW - wmPicW - wmPicMargin)+"px";
newDiv.style.top=(oimgTop + oimgH - wmPicH - wmPicMargin)+"px";
newDiv.appendChild(newImg);
var docBody=document.getElementsByTagName("body")[0];
if(!docBody.id) docBody.id="myDocBody";
var docBodyID=docBody.id;
$(docBodyID).appendChild(newDiv);
newImg=null;
newDiv=null;
}
</script>
<body>
JS模拟实现在图片上添加水印效果
<p> </p>
<img οnlοad="javascript:setWatermark(this,'http://avatar.profile.csdn.net/5/1/9/2_shenzhennba.jpg',60);" src="http://avatar.profile.csdn.net/5/B/6/2_zerosprite.jpg" width="400" height="200">
<p> </p>
<p>
<b>@Name:</b> JSWatermark<br>
<b>@Function:</b> make a watermark for image with picture by JavaScript<br>
<b>@Author:</b> shenzhenNBA<br>
<b>@Version:</b> 1.0.0<br>
<b>@Created date</b>: 2010-08-31<br><br>
<b>@Descriptioin</b>: setWatermark(objImg,watermarkPic,opacityValue)<br>
<b>objImg:</b> the image object which will add a watermark<br>
<b>watermarkPic:</b> the picture which will make into watermark picture, and display over <b>objImg</b><br>
<b>opacityValue:</b> set the opacity of the watermark picture, value range: 0--100<br><br>
<b>@Using:</b> using this function in the load Event of <b>objImg</b><br><br>
<b>@Example:</b> <img οnlοad="javascript:setWatermark(this,'http://www.xxx.com/images/mylogo.gif',60)"><br>
</p>
<p> </p>
<img οnlοad="javascript:setWatermark(this,'http://avatar.profile.csdn.net/5/1/9/2_shenzhennba.jpg',60);" src="http://avatar.profile.csdn.net/2/6/4/2_beyond_me21.jpg" width="400" height="200">
<p> </p>
<p> </p>
<img οnlοad="javascript:setWatermark(this,'http://avatar.profile.csdn.net/5/1/9/2_shenzhennba.jpg',60);" src="http://avatar.profile.csdn.net/E/D/5/2_superwfei.jpg" width="400" height="200">
<p> </p>
<p> </p>
<img οnlοad="javascript:setWatermark(this,'http://avatar.profile.csdn.net/5/1/9/2_shenzhennba.jpg',60);" src="http://avatar.profile.csdn.net/0/C/2/2_chinaxthulang.jpg" width="400" height="200">
<p> </p>
<p> </p>
<img οnlοad="javascript:setWatermark(this,'http://avatar.profile.csdn.net/5/1/9/2_shenzhennba.jpg',60);" src="http://avatar.profile.csdn.net/A/9/7/2_theforever.jpg" width="400" height="200">
<p> </p>
<p> </p>
<img οnlοad="javascript:setWatermark(this,'http://avatar.profile.csdn.net/5/1/9/2_shenzhennba.jpg',60);" src="http://avatar.profile.csdn.net/B/1/0/2_bluesky4014.jpg" width="400" height="200">
<p> </p>
</body>
</html>
以上是写完然后发,很多还可以改进,如放的位置,边距,是否带边框等等可以作为参数比较灵活,这个后面过段时间在增加一些功能。
注意的是这个仅仅是模拟水印效果输出显示,很简单,但并不是真正把水印图片写入到上传的图片中,如果要实现写入到上传图片中那需要图片处理控件实现,该控件还应该在服务器上注册才可以使用
JS模拟实现图片添加水印功能相关推荐
- html中实现添加水印的功能,JS模拟实现图片添加水印功能
JS模拟实现图片添加水印功能 ======================================================== 今天看到网友发帖求助如果在图片上自动添加水印的功能,于是 ...
- php绘图技术加水印,PHP图片添加水印功能示例小结
本文实例总结了PHP图片添加水印功能.分享给大家供大家参考,具体如下: 例1.很简单图下添加水印函数 /** * 追加水印 * * @param string $source_img 原始图片url ...
- js技术实现图片放大镜功能
利用idea软件 js技术实现图片放大功能 第一步 准备图片 将要放大图片放大 web 下 第二步 具体实现代码 <%@ page contentType="text/html;cha ...
- php模拟js点击按钮,JS模拟按钮点击功能的方法
本文实例讲述了JS模拟按钮点击功能的方法.分享给大家供大家参考,具体如下: usually function function load(){ //下面两种方法效果是一样的 document.getE ...
- html借助JS简单实现图片闪烁功能
图片闪烁 功能: 点击按钮,实现图片闪烁 效果如图: 代码如下: <!DOCTYPE html> <html><head><meta charset=&quo ...
- Java图片添加水印功能
图片添加水印 需求是需要添加多个斜的水印,如果只是添加单个水印可以参考这个:传送门 直接上代码: private static void waterMarkAdd(String sourceFile, ...
- ios 从assets加载图片_Flutter图片添加水印功能,Flutter保存Widget为图片
添加水印,两种实现思路,一种是将图片与水印解码,然后混编再编码,另一种是通过Widget的方式合成. 在这里采用的实现思路是使用层叠布局Stack加载图片以及水印部分,水印部分可能是一个现成的图片也可 ...
- Flutter图片添加水印功能,Flutter保存Widget为图片
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 网易云[玩转大前端]配套课程 EDU配套 教程 Flutter开发的点滴积累系列文章 添加水印,两种实现思路 ...
- 前端js实现给图片添加水印
文章目录 整体思路 一.Image加载图片,创建canvas来绘制图片 二.canvas绘制水印文本算法 三.vant中上传图片使用示例 总结 整体思路 1:.传入图片base64数据,使用js Im ...
最新文章
- JQuery操作下拉框
- Struts 2 --ONGL介绍
- QT的QAssociativeIterable类的使用
- Flink 靠什么征服饿了么工程师?
- linux mmu的实现的讲解_Linux中的段
- ios开发跳转safari_阻止iOS Web APP中点击链接跳转到Safari 浏览器新标签页
- C# 与 VC Dll 传输信息
- Chapter1-7_Speech_Recognition(Language Modeling)
- ipynb文件转为python(.py)文件
- 爬虫.之登陆及动态网页的抓取
- 【BZOJ-3721】Final Bazarek 贪心
- Qt——P7 对象树
- NVIDIA GPU的浮点计算能力
- 利用python搭建“5433小游戏集成平台”
- CAD保存时,提示 警告 多重从属对象 XXX
- 视频H.263与H.264的比较
- 【JAVA】经典排序算法,注释详细+可直接运行
- idea在类下面展示方法列表
- 什么是外汇套期保值?套期保值和对冲有什么区别?
- java 使用itextpdf工具实现HTML转PDF文件
热门文章
- 学速写的步骤来啦,零基础学习更简单
- 【Java生态圈技术总结】之深度剖析MapStruct对象拷贝工具
- JZ2440 数码相框项目 扩展项目介绍
- 蓝牙 舵狗 openmv通信相关
- ***对调查问卷结果实现统计,并将结果写入csv文件
- 软件设计模式-装饰器模式-工厂模式
- JAVA计算机毕业设计无人售货机管理系统(附源码、数据库)
- create函数用法
- Django Vue 项目踩坑记:The field admin.LogEntry.user was declared with a lazy reference to ‘xxx‘
- java tabcontrol,VC中TabControl控件使用方法