为Zblog图片自动加入水印

这两天研究了一下盗链的问题。简单来说盗链的来源有两种,一是图片盗链,二是文件盗链。对于第二种下载盗链,前面提了一下网站下载防盗链的方法,其实有效的防盗链方法还有不少,比如ISAPI_ReWrite,通过正则表达式控制的URL重写来防止盗链下载,大家可以去看看月光的介绍,这种方法也适用于图片盗链的防备,不过需要服务器的配置权限(需要重启IIS),一般用户是很难实现的。

图片盗链是很容易被忽视的,因为图片往往占用空间不大。但是,如果盗链者的流量很大,或者图片被四处盗链,恐怕流量的消耗也非常可观(每天G级都有可能)。我想,这就是为什么大部分站点的图片都会加上带有版权的水印,虽然这不是技术上杜绝盗链,但会起到一定的抑制作用。毕竟一大部分盗链者会因此而犹豫一下。

对于zblog,最简单的加水印方法如下:
方法一:
找到c_system_lib.asp文件,其中有函数upload,在该函数末尾加上下列代码即可:

If CheckRegExp(LCase(FileName),"jpg|gif|bmp|png") Then 
Dim Jpeg
Set Jpeg = Server.CreateObject("Persits.Jpeg")  ' 建立对象
Jpeg.Open BlogPath & "/upload/" & FileName  ' 图片所在位置
Jpeg.Canvas.Font.Color = &HCC6600' 颜色,这里是设置成:黑
Jpeg.Canvas.Font.Family = "方正隶变简体"  ' 设置字体
Jpeg.Canvas.Font.Bold = False '是否设置成粗体
Jpeg.Canvas.Font.Size = 24 '字体大小
Jpeg.Canvas.Font.Quality = 3 ' 文字清晰度
Jpeg.Canvas.Print Jpeg.OriginalWidth-250,Jpeg.OriginalHeight-30, "www.WinsHome.com"   '水印文字
Jpeg.Save BlogPath & "/upload/" & FileName  ' 保存文件
Set Jpeg = Nothing
END IF


方法一说明:
1.必须要改的部分是上述红色部分(除非你想加入我的水印文字)。
2.其他部分等号右边均可自定义,请参照注释
3.第一行的判断语句作用是判断上传的文件是否图片,否则上传其他文件会出错。
效果演示:点击打开图片
方法一的缺点:
1.细心的朋友会发现,水印处的背景有些斑斑点点,很模糊,对图像本身的效果有点影响,虽然不大。
2.如果某些图片想要全图,恐怕就拿不到了。

对于第二个缺点,我觉得可以有两个解决方法:
一是修改最后文件保存的地址,这样每次上传得图片会保存一个原图副本。
二是修改图片类型的判断,比如改为"jpg|gif|bmp",如果不希望加入水印,就将图片处理为png格式后再上传即可,而其他格式仍然自动加入水印。

对于第一个缺点,可能不很重要,不过,我还是把我的方法分享一下,希望的效果是加入的水印文字是透明的,仍然是上述位置,加入的代码变为:

If CheckRegExp(LCase(FileName),"jpg|gif|bmp|png") Then 
Dim Jpeg
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Jpeg.Open BlogPath & "/upload/" & FileName  ' 图片所在位置

Dim aa
aa=Jpeg.Binary '将原始数据赋给aa
'=========加文字水印=================
Jpeg.Canvas.Font.Color = &Hfffffff '水印文字颜色
Jpeg.Canvas.Font.Family = "Arial" '字体
Jpeg.Canvas.Font.Bold = True '是否加粗
Jpeg.Canvas.Font.Size = 24 '字体大小
Jpeg.Canvas.Font.ShadowColor = &H000000 '阴影色彩
Jpeg.Canvas.Font.ShadowYOffset = 1
Jpeg.Canvas.Font.ShadowXOffset = 1
Jpeg.Canvas.Brush.Solid = True
Jpeg.Canvas.Font.Quality = 4   '输出质量
Jpeg.Canvas.PrintText Jpeg.OriginalWidth/2-100,Jpeg.OriginalHeight/2+20,"WWW.WinsHome.COM" '水印位置及文字
bb=Jpeg.Binary '将文字水印处理后的值赋给bb,这时,文字水印没有不透明度

'============调整文字透明度================
dim MyJpeg
Dim Logo
dim bb
Set MyJpeg = Server.CreateObject("Persits.Jpeg")
MyJpeg.OpenBinary aa
Set Logo = Server.CreateObject("Persits.Jpeg")
Logo.OpenBinary bb
MyJpeg.DrawImage 0,0, Logo, 0.2 '0.3是透明度
MyJpeg.Save BlogPath & "/upload/" & FileName  ' 保存文件
set aa=nothing
set bb=nothing
Jpeg.close
MyJpeg.Close
Logo.Close
END IF


因为AspJpeg组件不支持文字的透明效果,这里的思路简单的可以概括为将文字先处理成图片水印,然后与原图融合起来。
方法二效果演示:点击查看图片

希望对大家有帮助,如果代码有问题或者您有更好的改进,请告诉我!

[updated 2007.02.05]1.7版本需要把上述所有 "/upload/" 修改为 "/" & ZC_UPLOAD_DIRECTORY & "/" (均包含引号).
前一篇:记事本小技巧:自动加入时间戳后一篇:"显示桌面"图标丢失怎么办?
发布:Debugger | 分类:代码收集 | 引用本文 | 发表评论 | 返回顶部
  • quote 9.kuyo Said at 2007-1-17 14:17:49:
  • 水印不错!

    给你样式的建议 "最近发表" 标题过长会换行!好象不怎么好看,可以用CSS隐去换行的部分!
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 11.Debugger Said at 2007-1-17 23:54:49:
  • http://winshome.com
  • 据大家反馈,FF和ie7没有问题,ie6的确没办法,只能通过双击选择一段文字。考虑下次直接换掉模板,暂时委屈一下吧。
    btw:采用了你的建议,标题不再换行,不过很担心出现半个汉字的情况。
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 12.Zx.MYS Said at 2007-2-8 8:42:43:
  • http://ZxMYS.com
  • 不错不错,不过Z-Blog这样更改代码实在有点烦,我有个想法,希望能写一个更改源码的基础过程封装在一个ASP里(就叫做插件中心吧),以后如果要改源码就写成插件直接调用插件中心,这样可以免去用户的很多麻烦.怎奈.asd同志不理我~晕~
    Debugger 于 2007-2-8 8:42:43 回复

    应该是比较麻烦的原因吧,估计得2.0。
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 13.walter Said at 2007-3-1 21:58:59:
  • Hehec_system_lib.asp文件,其中有函数upload???/

    我怎么找不着???....提醒下 呵呵,.....Misdoubt
    debuggger 于 2007-3-1 21:58:59 回复

    确切说应该是 UpLoad(bolAutoName) 这个函数。
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 15.边走边看 Said at 2007-3-1 22:01:08:
  • 一加上出现:处理 URL 时服务器上出错。请和系统管理员联络。
    debuggger 于 2007-3-1 22:01:08 回复

    不知道是否是插件支持上的问题,还待考证,很抱歉。
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 16.kkkk Said at 2007-3-1 21:59:30:
  • c_system_lib.asp文件,其中有函数upload???/

    我怎么找不着???....提醒下 呵呵,.....
    debuggger 于 2007-3-1 21:59:30 回复

    确切说应该是 UpLoad(bolAutoName) 这个函数。
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 17.Zx.MYS Said at 2007-3-1 22:00:16:
  • http://ZxMYS.COM
  • 貌似用了ASPJPEG后我的一个4K的GIF变成了40K的JPEG。。。
    debuggger 于 2007-3-1 22:00:16 回复

    很奇怪哦,我这里还没遇到,而且程序上看,图片的格式不应该有变化才对。
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 20.三分面子 Said at 2007-3-19 16:10:02:
  • 不能用。
    我照足功夫做了,可是不能用。
    我在这个贴有详细说明。
    http://bbs.rainbowsoft.org/viewt ... &extra=page%3D1
    Hehe
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 24.NNB Said at 2008-4-21 14:20:06:
  • ................................................................
    <a href="http://www.bzjx.net/pro11.asp">喷码机</a>
    <a href="http://www.tmdy.net/cp3-2.asp">河南喷码机</a>
    <a href="http://www.cnbz.cn/Product.asp?BigClassID=32">郑州喷码机</a>
    <a href="http://www.cnbz.cn/Product.asp?BigClassID=19">打包机</a>
    <a href="http://www.bzjx.net/pro4.asp">自动打包机</a>
    <a href="http://www.bzjx.net/pro4.asp">半自动打包机</a>
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 25.yinghua Said at 2008-5-13 13:48:47:
  • <a href="http://www.bzjx.net/pro11.asp">喷码机</a>
    <a href="http://www.tmdy.net/cp3-2.asp">喷码机</a>
    <a href="http://www.cnbz.cn/Product.asp?BigClassID=32">喷码机</a>
    <a href="http://www.cnbz.cn/Product.asp?BigClassID=18">灌装机</a>
    <a href="http://www.bzjx.net/pro10.asp">收缩机</a>
    <a href="http://www.cnbz.cn/Product.asp?BigClassID=33">枕式包装机</a>
    <a href="http://www.bzjx.net/pro4.asp">打包机</a>
  • 回复该留言 | 直接评论 | 返回顶部

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。