ASP组件自动生成图片水印
一般做法都是用aspjpeg的组件,这里有份用法说明,看一下吧。aspjpeg 是一款非常强大的图片处理组件,纯英文版本。不过早已经有免费版和破解版,但是对其进行详细与深入介绍的文章却是不多,即使有也只牵涉到图片缩略和
图片水印。可能是因为纯英文的缘故。这里我就是针对这些问题谈谈aspjpeg
的高级用法。这里的技术主要包括:图片缩略图片水印安全码技术图片切割图
片合并数据库支持更多不常用的方法介绍以及相关的一些实用技术aspjpeg唯
一点不足的就是输出方式比较单一。在这里,我们主要谈将图片处理保存后再
调用的这种输出方法。另外,本人比较懒,所以有些代码仍然引用于原文档,
不懂的地方偶会加以解释!学过vb或者的同志肯定一看就明白了。刷子
来着。呵呵。一、图片缩略%Set Jpeg=Server.CreateObject("Persits.Jpeg")调用组件Path=Server.MapPath("images")&"\clock.jpg"待处理图片路径Jpeg.Open Path打开图片高与宽为原图片的1/2
Jpeg.Width=Jpeg.OriginalWidth/2 Jpeg.Height=Jpeg.OriginalHeight/2保
存图片Jpeg.Save Server.MapPath("images")&"\clock_small.jpg"%IMG
SRC="images/clock_small.jpg"查看处理的图片二、图片水印%Set
Jpeg=Server.CreateObject("Persits.Jpeg")Jpeg.Open
Server.MapPath("images/dodge_viper.jpg")开始写文字
Jpeg.Canvas.Font.Color=&000000'red颜
Jpeg.Canvas.Font.Family="Courier New"字体Jpeg.Canvas.Font.Bold=True
是否加粗Jpeg.Canvas.Print 10,10,"Copyright?nbsp;XYZ,Inc."打印坐标x
打印坐标y需要打印的字符以下是对图片进行边框处理
Jpeg.Canvas.Pen.Color=&H 000000'black颜Jpeg.Canvas.Pen.Width=2画
笔宽度Jpeg.Canvas.Brush.Solid=False是否加粗处理Jpeg.Canvas.Bar
1,1,Jpeg.Width,Jpeg.Height起始X坐标起始Y坐标输入长度输入高度
Jpeg.Save Server.MapPath("images/dodge_viper_framed.jpg")保存%三、安
全码安全玛的道理和加水印差不多,很多朋友问我要具体的代码技术,在这里
我就写出来和大家分享,一般人我还不告诉他。呵呵。%生成安全码的函数www.knowsky function make_randomize(max_len,w_n)max_len生成长度,w_n:0可能包含字母,1:只为数字randomize for intcounter=1 to max_len
whatnext=int((1-0+1)*rnd+w_n)if whatnext=0 then upper=122 lower=97 else upper=57 lower=48 end if strnewpass=strnewpass&chr(int((upper-lower+1)*rnd)+lower)next make_randomize=strnewpass end function%生成安全码的图片。当然你要预先准备一张背景图
哦%random_num=make_randomize(4,1)生成4位数字的安全码
session("random_num")=random_num为什么调用session,没有session的安全码是完全没有意义的。呵呵Set
Jpeg=Server.CreateObject("Persits.Jpeg")调用组件Jpeg.Open
Server.MapPath("infos/random_pic/random_index.gif")打开准备的图片Jpeg.Canvas.Font.Color=&H 006699 Jpeg.Canvas.Font.Family="Arial Black"Jpeg.Canvas.Font.Bold=false Jpeg.Canvas.PrintText 0,-
2,random_num jpeg.save
Server.MapPath("infos/random_pic/random_index.bmp")保存%img
src="infos/random_pic/random_index.bmp"border="0"align="absmiddle"自己做做看。呵呵。四、图片切割一直以来,对aspjpeg不了解的人以为是无法用它来进行切割的。其实有这样的一个方法的crop x1,y1,x2,y2切割长方型左上角x坐标,y坐标右下角x坐标y坐标下面我就做一个演示哈Set
Jpeg=Server.CreateObject("Persits.Jpeg")jpeg.open
server.MapPath("/pic/1.gif")jpeg.width=70
Jpeg.Height=Jpeg.OriginalHeight*70/jpeg.p
0,0,70,52开始切割其实是把超过52象素的下部分去掉jpeg.save
server.MapPath("/temp_pic/small_1.gif")保存怎么样,很简单吧五、图片合并我们这里是要把logo图片加到dodge_viper.jpg图片上去其实,图片合并的方法也可以用来动态打水印哦Set
Photo=Server.CreateObject("Persits.Jpeg")PhotoPath=Server.MapPath("im ages")&"\dodge_viper.jpg"Photo.Open PhotoPath Set
Logo=Server.CreateObject("Persits.Jpeg")LogoPath=Server.MapPath("imag es")&"\clock.jpg"Logo.Open LogoPath Logo.Width=70
Logo.Height=Logo.Width*Logo.OriginalHeight/Logo.OriginalWidth Photo.DrawImage 0,0,Logo Photo.SendBinary这里用了sendBinary的输出方法。当然,你也可以先保存更改后的dodge_viper.jpg,再输入也可以。我个人不大喜欢用sendBinary方法,在网速慢的时候容易出错。在速度方面也不怎
样。呵呵。六、数据库支持这里不多说了。其实就是Binary方法,大家知道图
片存进数据库只能存为二进制的文件的。所以代码就懒的写了。七、更多方法
介绍Canvas.Line(Left,Top,Right,Bottom)画一条直线
Canvas.Ellipse(Left,Top,Right,Bottom)画出一个椭圆
Canvas.Circle(X,Y,Radius)画出一个圆Canvas.Bar(Left,Top,Right,Bottom)
画出一个长方形,上面有代码介绍了Canvas.Font.ShadowColor文字阴影颜Canvas.Font.ShadowXOffset As Long阴影X坐标设定
Canvas.Font.ShadowYOffset As Long Y坐标设定Canvas.Font.BkMode As String文字背景*'//--AspJpeg组件的预览和水印生成--开始--'创建预览图片:call CreateView(原始文件的路径,预览文件名及路径)Sub
CreateView(imagename,tempFilename)'定义变量。Dim PreviewImageFolderName Dim ogvbox,objFont Dim Logobox,LogoPath LogoPath=Server.MapPath("images")&"\shuiyin.gif"'//加入图片所在路径及
文件名(我的是论坛\images\shuiyin.gif)。Select Case upload_ViewType Case 0'---CreatePreviewImage---set
ogvbox=Server.CreateObject("CreatePreviewImage.cGvbox")ogvbox.SetSave PreviewImagePath=Server.MapPath(tempFilename)'预览图存放路径。ogvbox.SetPreviewImageSize=SetPreviewImageSize'预览图宽度。
box shadow怎么设置ogvbox.SetImageFile=trim(Server.MapPath(imagename))'imagename原始文
件的物理路径。'创建预览图的文件。If ogvbox.DoImageProcess=false Then Response.write"生成预览图错误:"&ogvbox.GetErrString End If Case 1'--
-AspJpegV1.2---Set Logobox=Server.CreateObject("Persits.Jpeg")'//建议
不要图片和文字水印同时使用,本代码为使用图片水印。Logobox.Open LogoPath'//读取添加的图片。'//重新设置图片的大小。
Logobox.Width=186'//用做水印的图片的宽度值(像素)。
Logobox.Height=52'//用做水印的图片的高度值(像素)。'//添加水印。Set ogvbox=Server.CreateObject("Persits.Jpeg")'//读取要处理的原文件。ogvbox.Open Trim(Server.MapPath(imagename))If ogvbox.OriginalWidth
Cint(ImageWidth)or ogvbox.Originalheight Cint(ImageHeight)Then
F_Viewname=""Set ogvbox=Nothing Exit Sub Else IF ImageMode""and FileExt"gif"Then'//如果将这行改为IF ImageMode""Then则可给上传的GIF
图片也加上水印,但是那些动画的GIF在加了水印以后就只剩第一桢了,根据
你的需求酌情处理吧。'//关于修改字体及文字颜的。
'//ogvbox.Canvas.Font.Color=&H0000FF'//水印文字的颜,&H后面输入
彩值。'//ogvbox.Canvas.Font.Size=18'//水印文字的大小。
'//ogvbox.Canvas.Font.Family="Arial"'//水印文字的字体名称。
'//ogvbox.Canvas.Font.ShadowColor=&H 000000'//水印文字的阴影彩。
'//ogvbox.Canvas.Font.ShadowXoffset=1'//水印文字阴影向右偏移的像素值,输入负值则向左偏移。'//ogvbox.Canvas.Font.ShadowYoffset=1'//水印文字
阴影向下偏移的像素值,输入负值则向右偏移。
'//ogvbox.Canvas.Font.Quality=3'//水印文字的清晰度,从0~4,变换不是
很大,建议用2或3。'//ogvbox.Canvas.Font.Bold=True'//水印文字是否为
粗体,True=粗体False=正常。'ogvbox.Canvas.Print 10,10,ImageMode'//水
印文字的起始坐标(像素)。ogvbox.Canvas.Pen.Color=&H 000000'//增加水印
后图片的边框彩。ogvbox.Canvas.Pen.Width=1'//增加水印后图片的边框宽度。ogvbox.Canvas.Brush.Solid=False'//边框内是否填充颜,你可以试试
看值为True时的效果^o^ogvbox.DrawImage ogvbox.width-
186,ogvbox.height-52,Logobox,0.5'//水印图片的起始坐标,我这里
ogvbox.width-186,ogvbox.height-52,表示图片在右下角,因为我的图片宽是186,高是52,所以这样写,你可以根据自己的图片进行调整。0.5是透明度,
我这里是半透明,1表示不透明,你也可以试试看0.7或者0.8的效果。ogvbox.Canvas.Bar 0,0,ogvbox.Width,ogvbox.Height'//水印可用的范围。我
这里表示左上角至右下角,即整张图片的任意为止都可加水印。ogvbox.Save Server.MapPath(imagename)'//根据以上参数生成增加水印后的图片文件。End If ogvbox.Width=ImageWidth
ogvbox.height=ImageHeight'ogvbox.height=ogvbox.Originalheight*ImageWi dth\ogvbox.OriginalWidth ogvbox.Sharpen 1,120 ogvbox.Save
Server.MapPath(tempFilename)'//生成增加水印后的图片的预览图片。End If Set Logobox=Nothing'//--AspJpeg组件的预览和水印生成--结束--*