DBS独立服客服务

查看完整版本: zblog自动为上传图片加入水印(for 1.6final and 1.7Laputa)

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]]

文举锋 2007-2-7 10:39

学习了

aibiliwu 2007-2-20 00:50

不能用:@

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

好,我测试下

wolfit 2007-3-13 18:29

强悍!改天加上!@

diba2000 2007-3-17 02:01

在最新版本的Z-BOLG没有集成进去这个功能吗?

diba2000 2007-3-17 02:16

文件名我就找到了,但打开后不知道应该加在什么地方。

麻烦请说具体一点,好吗?

谢谢!

debugger 2007-3-19 08:58

回复 #14 diba2000 的帖子

请看9 楼

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

谢谢,测试成功

art_ali 2007-4-7 13:55

:Q :Q :Q :funk:

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# 的帖子

权限问题多半与程序无关,与空间给你的权限有关,可能没有前面提到的组件。

eboyhu 2007-11-24 23:50

吸吸吸吸吸吸:loveliness:
页: [1] 2
查看完整版本: zblog自动为上传图片加入水印(for 1.6final and 1.7Laputa)