Asp使用AspJpeg组件制作透明文字水印

11月 22, 2013 0 条评论 341 次阅读 0 人点赞

asp

条件:

  1. aspjpeg能对图片水印进行透明度调整,不能对文字水印调整;
  2. aspjpeg支持Binary,可以Jpeg.OpenBinary读取,可以Jpeg.sendBinary,也可Jpeg.Binary赋值。

思路:

  1. 把原始的图片数据二进制度赋值给aa;
  2. 将文字水印处理后的图片数据二进制赋值给bb;
  3. 以bb作为"图片水印",附加在aa上,调整透明度,输出就ok了;

参考代码:

<%
LocalFile="d:\mytest.jpg"
TargetFile="d:mytest_Text.jpg"
Dim Jpeg
Set Jpeg = Server.CreateObject("Persits.Jpeg")
If -2147221005=Err then
Response.write "没有这个组件,请安装!" ’检查是否安装AspJpeg组件
Response.End()
End If
Jpeg.Open (LocalFile) ’打开图片
If err.number then
Response.write"打开图片失败,请检查路径!"
Response.End()
End if
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 = 35 ’字体大小
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.feitec.com" ’水印位置及文字
bb=Jpeg.Binary ’将文字水印处理后的值赋给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是透明度
cc=MyJpeg.Binary ’将最终结果赋值给cc,这时也可以生成目标图片了
response.BinaryWrite cc ’将二进输出给浏览器
MyJpeg.Save (TargetFile)
Jpeg.close
MyJpeg.Close
Logo.Close
%>

AspCMS用户需要添加水印功能只要打开网站根目录下的inc/AspCms_CommonFun.asp,然后搜索“水印”,在图片水印注释后的代码替换为下面的代码保存,然后后台开启水印功能,上传就有透明的文字水印了。参数也在下面的代码中调整。

附上代码:

'图片水印
'waterMarkImg(saveImgPath,waterMarkLocation)
Function waterMarkImg(saveImgPath,location)
dim sAllowMarkExt:sAllowMarkExt = ".jpg,.png,.gif,.jpeg,.bmp"
'Left(saveImgPath,inStrRev(saveImgPath,".")-1)
If InStr(sAllowMarkExt, Mid(saveImgPath, InStrRev(saveImgPath, "."), Len(saveImgPath))) = 0 Then Exit Function

'die instr(mid(saveImgPath,sAllowMarkExt)
	If Not isInstallObj("Persits.Jpeg") Then exit function
	dim jpegObj : set jpegObj = Server.CreateObject("Persits.Jpeg")
	dim strWidth,strHeight : strWidth=len(waterMarkFont)*13 : strHeight=3
	jpegObj.Open Server.MapPath(saveImgPath)
	If  jpegObj is nothing then exit function
	if jpegObj.width <200 and jpegObj.height<200 then exit function

	Dim MyJpeg'定义输出图片
	Dim Logo  '定义水印图片
	Dim TempA '原始图片的二进制数据
	Dim TempB '加了不透明文字水印的图片
	Dim TempC '最终效果
	TempA=jpegObj.Binary'将原始数据赋给TempA

	'为图片加入水印功能
	jpegObj.Canvas.Font.Color = &Hf7f7f7 ' 颜色,这里是设置成:黑
	jpegObj.Canvas.Font.Family = "黑体"  ' 设置字体
	jpegObj.Canvas.Font.Bold = False '是否设置成粗体
	jpegObj.Canvas.Font.Size = 16 '字体大小
	jpegObj.Canvas.Font.Quality = 90 ' 文字清晰度
	select case location
		case "1" : jpegObj.Canvas.Print 5 , strHeight, waterMarkFont
		case "2" : jpegObj.Canvas.Print (jpegObj.width-strWidth) / 2, strHeight, waterMarkFont
		case "3" : jpegObj.Canvas.Print jpegObj.width-strWidth-5, strHeight, waterMarkFont
		case "4" : jpegObj.Canvas.Print 5 , (jpegObj.height-strHeight)/2, waterMarkFont
		case "5" : jpegObj.Canvas.Print (jpegObj.width-strWidth) / 2, (jpegObj.height-strHeight)/2, waterMarkFont
		case "6" : jpegObj.Canvas.Print jpegObj.width-strWidth-5, (jpegObj.height-strHeight)/2, waterMarkFont
		case "7" : jpegObj.Canvas.Print 5 , jpegObj.height-40, waterMarkFont
		case "8" : jpegObj.Canvas.Print (jpegObj.width-strWidth) / 2, jpegObj.height-40, waterMarkFont
		case else : jpegObj.Canvas.Print jpegObj.width-strWidth-5, jpegObj.height-40, waterMarkFont
	end select

	'============调整文字透明度================
	TempB=jpegObj.Binary '将文字水印处理后的值赋给TempB,这时,文字水印没有不透明度
	Set MyJpeg = Server.CreateObject("Persits.Jpeg")
	MyJpeg.OpenBinary TempA
	Set Logo = Server.CreateObject("Persits.Jpeg")
	Logo.OpenBinary TempB
	MyJpeg.DrawImage 0, 0, Logo, 0.2 '0.2是透明度
	TempC=MyJpeg.Binary '将最终结果赋值给TempC,这时也可以生成目标图片了
	MyJpeg.Save Server.MapPath(saveImgPath)
	set TempA=nothing
	set TempB=nothing
	set TempC=nothing
	jpegObj.close
	MyJpeg.Close
	Logo.Close

	'jpegObj.Save Server.MapPath(saveImgPath)    ' 保存文件
	set jpegObj=Nothing
End Function

孑愁

一个Microsoft、Google、Apple的爱好者综合体,喜欢一切和数码科技有关的东西,也希望能及时的把这些分享给关注它们的人。现就职于某互联网公司,担任前端

文章评论(0)