27 123
发新话题
打印

zblog自动为上传图片加入水印(for 1.6final and 1.7Laputa)

本主题由 Zx.MYS 于 2007-9-8 10:58 加入精华

zblog自动为上传图片加入水印(for 1.6final and 1.7Laputa)

提醒:使用前请确认所在空间是否支持aspjpeg组件,之前为大家造成不便敬请原谅,很抱歉。

应zx要求,已经改为默认1.7的方法。
一直没发,因为当时1.7还没有测试,今天自己修改试了一下1.7,找到了更新方法,共享一下。
1.6版本的不要急着修改,注意看结尾处的说明,有疑问或者改进可以讨论一下。
原文地址:http://www.winshome.com/coding/2007-01/179.html

对于zblog1.7 laputa,最简单的加水印方法如下:
方法一:
找到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 & "/" & 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
方法一说明:
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 & "/" & 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
因为AspJpeg组件不支持文字的透明效果,这里的思路简单的可以概括为将文字先处理成图片水印,然后与原图融合起来。
方法二效果演示:见第二张图

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

[updated 2007.02.05]1.6版本需要把上述所有 "/" & ZC_UPLOAD_DIRECTORY & "/"  修改为 "/upload/" (均包含引号).

[ 本帖最后由 debugger 于 2007-3-22 12:07 编辑 ]
附件: 您所在的用户组无法下载或查看附件

TOP

学习了

TOP

不能用

TOP

引用:
原帖由 aibiliwu 于 2007-2-20 00:50 发表
不能用
还能用吗?

TOP

回复 #3 aibiliwu 的帖子

可否说说原因和现象?

TOP

我能用,效果很好,谢谢分享!

楼主你代码中两处地方漏了 & 符号

Jpeg.Open BlogPath & "/" & ZC_UPLOAD_DIRECTORY "/"  & FileName  ' 图片所在位置
MyJpeg.Save BlogPath & "/" & ZC_UPLOAD_DIRECTORY "/" & FileName  ' 保存文件

TOP

回复 #6 chenfang 的帖子

谢谢提醒,已经修正.

TOP

要加在哪个位置我不懂,能否告诉我要插在哪一句代码后?

TOP

回复 #8 dansson 的帖子

可以使用搜索功能,找到UpLoad(bolAutoName),这就是upload函数的所在
代码加载 UpLoad=True 前面即可。

TOP

错误原因:未知错误

ID:-2147024891

摘要:
006~ASP 0178~Server.CreateObject 访问错误~检查权限时,对 Server.CreateObject 的调用失败。拒绝对此对象的访问。

Server 对象

TOP

好,我测试下

TOP

强悍!改天加上!@

TOP

 27 123
发新话题