debugger 2007-2-7 02:40
zblog自动为上传图片加入水印(for 1.6final and 1.7Laputa)
提醒:[color=Red]使用前请确认所在空间是否支持aspjpeg组件,之前为大家造成不便敬请原谅,很抱歉。[/color]
[color=Red][size=3]应zx要求,已经改为默认1.7的方法。[/size][/color]
一直没发,因为当时1.7还没有测试,今天自己修改试了一下1.7,找到了更新方法,共享一下。
[color=Red]1.6版本的[/color]不要急着修改,注意看结尾处的说明,有疑问或者改进可以讨论一下。
原文地址:[url=http://www.winshome.com/coding/2007-01/179.html]http://www.winshome.com/coding/2007-01/179.html[/url]
对于[color=Red]zblog1.7 laputa[/color],最简单的加水印方法如下:
方法一:
找到c_system_lib.asp文件,其中有函数upload,在该函数末尾加上下列代码即可:[code]If CheckRegExp(LCase(FileName),"jpg|gif|bmp|png") Then
Dim Jpeg
Set Jpeg = Server.CreateObject("Persits.Jpeg") ' 建立对象
Jpeg.Open BlogPath & "/" & ZC_UPLOAD_DIRECTORY & "/" & 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 & "/" & ZC_UPLOAD_DIRECTORY & "/" & FileName ' 保存文件
Set Jpeg = Nothing
END IF[/code]方法一说明:
1.必须要改的部分是上述网址部分(除非你想加入我的水印文字)。
2.其他部分等号右边均可自定义,请参照注释
3.第一行的判断语句作用是判断上传的文件是否图片,否则上传其他文件会出错。
效果演示:见第一张图
方法一的缺点:
1.细心的朋友会发现,水印处的背景有些斑斑点点,很模糊,对图像本身的效果有点影响,虽然不大。
2.如果某些图片想要全图,恐怕就拿不到了。
对于第二个缺点,我觉得可以有两个解决方法:
一是修改最后文件保存的地址,这样每次上传得图片会保存一个原图副本。
二是修改图片类型的判断,比如改为"jpg|gif|bmp",如果不希望加入水印,就将图片处理为png格式后再上传即可,而其他格式仍然自动加入水印。
对于第一个缺点,可能不很重要,不过,我还是把我的方法分享一下,希望的效果是加入的水印文字是透明的,仍然是上述位置,加入的代码变为:[code]If CheckRegExp(LCase(FileName),"jpg|gif|bmp|png") Then
Dim Jpeg
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Jpeg.Open BlogPath & "/" & ZC_UPLOAD_DIRECTORY & "/" & 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 & "/" & ZC_UPLOAD_DIRECTORY & "/" & FileName ' 保存文件
set aa=nothing
set bb=nothing
Jpeg.close
MyJpeg.Close
Logo.Close
END IF[/code]因为AspJpeg组件不支持文字的透明效果,这里的思路简单的可以概括为将文字先处理成图片水印,然后与原图融合起来。
方法二效果演示:见第二张图
希望对大家有帮助,如果代码有问题或者您有更好的改进,请告诉我!
[color=Red][size=2][updated 2007.02.05]1.6版本需要把上述所有 "/" & ZC_UPLOAD_DIRECTORY & "/" 修改为 "/upload/" (均包含引号).[/size][/color]
[[i] 本帖最后由 debugger 于 2007-3-22 12:07 编辑 [/i]]
f001230 2007-3-1 21:54
[quote]原帖由 [i]aibiliwu[/i] 于 2007-2-20 00:50 发表
不能用:@ [/quote]
还能用吗?
debugger 2007-3-1 21:58
回复 #3 aibiliwu 的帖子
可否说说原因和现象?
chenfang 2007-3-2 12:22
我能用,效果很好,谢谢分享!
楼主你代码中两处地方漏了 & 符号
Jpeg.Open BlogPath & "/" & ZC_UPLOAD_DIRECTORY "/" & FileName ' 图片所在位置
MyJpeg.Save BlogPath & "/" & ZC_UPLOAD_DIRECTORY "/" & FileName ' 保存文件
debugger 2007-3-2 22:22
回复 #6 chenfang 的帖子
谢谢提醒,已经修正.
dansson 2007-3-8 22:20
要加在哪个位置我不懂,能否告诉我要插在哪一句代码后?
debugger 2007-3-12 11:02
回复 #8 dansson 的帖子
可以使用搜索功能,找到UpLoad(bolAutoName),这就是upload函数的所在
代码加载 UpLoad=True 前面即可。
weiqunxing 2007-3-12 12:57
错误原因:未知错误
ID:-2147024891
摘要:
006~ASP 0178~Server.CreateObject 访问错误~检查权限时,对 Server.CreateObject 的调用失败。拒绝对此对象的访问。
Server 对象
asongzhang 2007-3-13 14:12
好,我测试下
diba2000 2007-3-17 02:16
文件名我就找到了,但打开后不知道应该加在什么地方。
麻烦请说具体一点,好吗?
谢谢!
debugger 2007-3-19 08:59
回复 #10 weiqunxing 的帖子
我觉得是服务器没有这个组件的原因,暂时不要安装了。 很抱歉。
diba2000 2007-3-19 16:03
我照足功夫做了,可是不能用。
我在这个贴有详细说明。
[url]http://bbs.rainbowsoft.org/viewthread.php?tid=12310&extra=page%3D1[/url]
asongzhang 2007-4-3 22:33
谢谢,测试成功
hd11223 2007-4-14 22:46
不行啊,显示[quote]错误原因:未知错误
ID:-2147467259
摘要:
007~ASP 0107~堆栈溢出~处理中的数据超过允许的极限。
请求对象
[/quote]
请问是怎么回事啊?
redfish 2007-7-31 14:19
Jpeg.Canvas.PrintText Jpeg.OriginalWidth/2-100,Jpeg.OriginalHeight/2+20,"WWW.WinsHome.COM" '水印位置及文字
bb=Jpeg.Binary '将文字水印处理后的值赋给bb,这时,文字水印没有不透明度
把水印的位置放到图片右下角。这里面的数值应该改到多少哦??
debugger 2007-10-17 18:59
回复 21# 的帖子
Jpeg.OriginalWidth --宽度
Jpeg.OriginalHeight --长度
Jpeg.OriginalWidth/2-100,Jpeg.OriginalHeight/2+20 意思是w/2-100,h/2+20. 接近中间
你的可以改成 w-x, y
x->你的文字宽度,y-〉你的文字高度 调整一下就行了。
debugger 2007-10-17 19:00
回复 20# 的帖子
权限问题多半与程序无关,与空间给你的权限有关,可能没有前面提到的组件。