ASP加图片水印

<%
'利用AspJpeg组件给上传图片自动加水印,在使用该组件前请测试你的服务器是否支持。
'在你的上传文件(如:upfilea.asp)中加入以下代码:

'程序代码
Dim Jpeg'' 水印部分代码开始
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Jpeg.Open Server.MapPath(FileName) '获取图片,根据实际情况更改
Jpeg.Canvas.Font.Color = &330066'' 绿色'' '设置文字水印颜色
Jpeg.Canvas.Font.Family = "宋体"                '设置文字字体
Jpeg.Canvas.Font.Size = 12                        '设置字体大小
Jpeg.Canvas.Pen.Width = 2                        '画笔宽度
Jpeg.Canvas.Font.Quality = 1                     ' 设置文字清晰度
Jpeg.Canvas.Font.Bold = True                    '设置字体加粗
Jpeg.Canvas.Print 180, 420, "Lounger.cn"   '定义水印文字
Jpeg.Save Server.MapPath(FileName)     '保存文件,根据实际情况更改
Set Jpeg = Nothing                   ' 注销对象 水印部分结束              ' 注销对象 水印部分结束
 %>
 


<%
'ASP给图片加水印是需要组件的...常用的有aspjpeg软件和中国人自己开发的wsImage软件,可以上网搜索下载这两个软件,推荐使用咱们中国人自己开发的wsImage,毕竟是中文版,容易操作.
'注册组件的方法:
'命令提示符下输入"regsvr32 [Dll路径]" 就可以了.
'图片添加水印无非就是获得图片大小,然后把水印写上去..ASP代码只是起个控制组件的作用.用代码来说明一切吧.

'一:获得图片大小(这里是用象素值表示的.学PhotoShop的朋友都应该明白)
set obj=server.CreateObject("wsImage.Resize") ''调用组件
obj.LoadSoucePic server.mappath("25.jpg") ''打开图片,图片名字是25.jpg
obj.GetSourceInfo iWidth,iHeight
response.write "图片宽度:" & iWidth & "<br>" ''获得图片宽度
response.write "图片高度:" & iHeight & "<br>" ''获得图片高度
strError=obj.errorinfo
if strError<>"" then
response.write obj.errorinfo
end if
obj.free
set obj=nothing


'二:添加文字水印
set obj=server.CreateObject("wsImage.Resize")
obj.LoadSoucePic server.mappath("25.jpg") ''装载图片
obj.Quality=75
obj.TxtMarkFont = "华文彩云" ''设置水印文字字体
obj.TxtMarkBond = false ''设置水印文字的粗细
obj.MarkRotate = 0 ''水印文字的旋转角度
obj.TxtMarkHeight = 25 ''水印文字的高度
obj.AddTxtMark server.mappath("txtMark.jpg"), "带你离境", &H00FF00&, 10, 70
strError=obj.errorinfo ''生成图片名字,文字颜色即水印在图片的位置
if strError<>"" then
response.write obj.errorinfo
end if
obj.free
set obj=nothing

'三:添加图片水印
set obj=server.CreateObject("wsImage.Resize")
obj.LoadSoucePic server.mappath("25.jpg") ''装载图片
obj.LoadImgMarkPic server.mappath("blend.bmp") ''装载水印图片
obj.Quality=75
obj.AddImgMark server.mappath("imgMark.jpg"), 315, 220,&hFFFFFF, 70
strError=obj.errorinfo ''生成图片名字,文字颜色即水印在图片的位置
if strError<>"" then
response.write obj.errorinfo
end if
obj.free
set obj=nothing

 %>
 


<%
'其实给图片添加水印就这么简单.然后我在说下WsImage.dll组件的另外两个主要用法.包括:
'剪裁图片,生成图片的缩略图.
'还是以我得习惯,用代码加注释说明:


'剪裁图片:
set obj=server.CreateObject("wsImage.Resize")
obj.LoadSoucePic server.mappath("25.jpg")
obj.Quality=75
obj.cropImage server.mappath("25_crop.jpg"),100,10,200,200 ''定义裁减大小和生成图片名字
strError=obj.errorinfo
if strError<>"" then
response.write obj.errorinfo
end if
obj.free
set obj=nothing

'详细注释:裁减图片用到了WsImage的CropImage方法.其中定义生成图片时候,100,10是左上角的裁减点,即离图片左边是100象素,顶端10象素.后两个200代表的是裁减的宽带和高和高度.

''----------------------------------------------------------------''
'生成图片缩略图:
set obj=server.CreateObject("wsImage.Resize")
obj.LoadSoucePic server.mappath("25.jpg") ''加载图片
obj.Quality=75
obj.OutputSpic server.mappath("25_s.jpg"),0.5,0.5,3 ''定义缩略图的名字即大小
strError=obj.errorinfo
if strError<>"" then
response.write obj.errorinfo
end if
obj.free
set obj=nothing

'详细说明:
'产生缩略图共有四种导出方式:
'(1) obj.OutputSpic server.mappath("25_s.jpg"),200,150,0
'200为输出宽,150为输出高,这种输出形式为强制输出宽高,可能引起图片变形。
'(2) obj.OutputSpic server.mappath("25_s.jpg"),200,0,1
'以200为输出宽,输出高将随比列缩放。
'(3) obj.OutputSpic server.mappath("25_s.jpg"),0,200,2
'以200为输出高,输出宽将随比列缩放。
'(4) obj.OutputSpic server.mappath("25_s.jpg"),0.5,0.5,3
'第一个0.5表示生成的缩略图是原图宽的一半,即表示宽缩小比例。
'第二个0.5表示生成的缩略图是原图高的一半,即表示高缩小比例。
'宽高的缩小比例一致意味着将对原图进行比例缩小。宽高的缩放比例如果大于1,则对原图进行放大。

 %>
 
 
--------------------------------------------------------------

1、什么是AspJpeg?
AspJpeg是一款功能强大的基于Microsoft IIS环境的图片处理组件,网络上对其进行详细和深入介绍的中文文章并不多,即使有一般也只是牵涉到图片缩略图和图片水印,这与其为英文版本有着密切的关系。
AspJpeg可以使用很少的代码在您的ASP/ASP.Net应用程序上动态的创建高质量的缩略图象,支持的图象格式有:JPEG, GIF, BMP, TIFF, PNG
AspJpeg主要可以做到:
生成缩略图片
生成水印图片
图片合并
图片切割
数据库支持
安全码技术
2、AspJpeg功能摘要
支持JPEG, GIF, BMP, TIFF 和 PNG 格式图片. 输出格式始终为 JPEG
源图片可以来源于磁盘、内存、或者记录集(数据库)
缩略图片可以保存到磁盘、内存、或者HTTP流
支持三种更改大小方式: nearest-neighbor, bilinear, and bicubic.
可以在图片之上添加图片或者文字.
支持画中画
支持复制,反转,旋转,锐化,灰度调节.
可以调节压缩比率,以得到最佳输出效果和大小.
从Jpeg图片中抽取EXIF 和 IPTC数据.
CMYK-RGB转换
Read/write access to individual pixels of an image. (从图象中对任意象素进行读/写存取。)
3、AspJpeg系统需求
Windows 95/98/NT/2000/XP/2003, and
IIS 4.0+ and ASP/ASP.NET, or
Visual Basic 5.0+, or
Visual C++ 5.0+, or
any development environment supporting COM.
4、AspJpeg安装
全新安装:
在AspJpeg安装过程中输入序列号即可,如果安装位置磁盘格式为NTFS,则可能出现访问权限问题,需手工设置安装目录对Everyone有访问权限。
更新安装:
如果之前有装过其它版本的AspJpeg组件,则需要先卸载原来的组件,再进行新版本的安装。
先停止IIS
Net Stop iisadmin /y
卸载旧版组件
regsvr32 /u Path/aspjpeg.dl(Path为安装路径)
重启IIS
Net Start w3svc
然后再进行全新安装或复制AspJpeg.dll文件到安装目录进行手工安装:
regsvr32 Path/aspjpeg.dll(Path为安装路径)
如果在正常安装过程中没有输入序列号或手工安装则必须在注册表中加入以下项,为方便起见您可以直接将以下代码保存为.reg文档并导入注册表:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Persits Software\AspUpload3\RegKey]
@="21764-40765-60456"

5、如何创建一个AspJpeg实例?
Set Jpeg = Server.CreateObject("Persits.Jpeg")

6、如何查看到期时间(是否注册成功)?
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Response.Write Jpeg.Expires

注册成功则到期时间为:9999-9-9
否则为:安装日期加1个月期限
7、如何用AspJpeg组件生成图片缩略图?
<%
Set Jpeg = Server.CreateObject("Persits.Jpeg") '创建实例
Path = Server.MapPath("../images/apple.jpg") '处理图片路径
Jpeg.Open Path '打开图片
'调整宽度和高度为原来的50%
Jpeg.Width = Jpeg.OriginalWidth / 2
Jpeg.Height = Jpeg.OriginalHeight / 2
Jpeg.Save Server.MapPath("apple_small.jpg") '保存图片到磁盘
Jpeg.Close:Set Jpeg = Nothing
%>

8、如何用AspJpeg组件生成图片水印?
<%
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 (c) XYZ, Inc."
打印坐标x 打印坐标y 需要打印的字符
以下是对图片进行边框处理
Jpeg.Canvas.Pen.Color = &H000000'' 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") 保存
%>

9、如何用AspJpeg组件进行图片合并?
AspJpeg 1.3+ enables you to place images on top of each other via the method DrawImage. To use this method, you must create two instances of the AspJpeg objects and populate both of them with images via calls to Open (or OpenBinary). When calling Canvas.DrawImage, the 2nd instance of AspJpeg is passed as an argument to this method, along with the X and Y offsets (in pixels):
使用该方法,您必需创建两个AspJpeg实例对象
<%
Set Jpeg1 = Server.CreateObject("Persits.Jpeg")
Set Jpeg2 = Server.CreateObject("Persits.Jpeg")
Jpeg1.Open Server.MapPath("t.jpg")
Jpeg2.Open Server.MapPath("t1.jpg")
Jpeg1.Canvas.DrawImage 10, 10, Jpeg2 ' optional arguments omitted
jpeg1.save Server.mappath("tt.jpg")
%>

10、如何用AspJpeg组件进行图片切割?
AspJpeg 1.1+ is also capable of cutting off edges from, or cropping, the resultant thumbnails via the method Crop(x0, y0, x1, y1). The size of the cropped image is specified by the coordinates of the upper-left and lower-right corners within the resultant thumbnail, not the original large image.
<%
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Jpeg.Open Server.MapPath("t.jpg")
jpeg.Crop 20, 30, jpeg.Width - 20, jpeg.Height - 10
jpeg.save Server.mappath("tt.jpg")
Response.write("<img src=tt.jpg>")
%>

11、如何用AspJpeg组件创建安全码?
创建安全码原理上和创建水印差不多。
<%
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("t.jpg") '打开准备的图片
Jpeg.Canvas.Font.Color = &HFFFFFF
Jpeg.Canvas.Font.Family = "Arial Black"
Jpeg.Canvas.Font.Bold = false
Jpeg.Canvas.PrintText 0, -2, random_num
jpeg.save Server.MapPath("tt.jpg") '保存
%>
<img src="tt.jpg" border="0" align="absmiddle">

12、如何让AspJpeg组件支援数据库?
图片存进数据库只能以二进制数据保存,这里即利用AspJpeg的Binary方法,下面以两个AspJpeg用户手册上的代码为例,具体请参考AspJpeg用户手册:
Opening Images from Memory
<% ' Using ADO, open database with an image blob
strConnect = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/aspjpeg.mdb")
Set rs = Server.CreateObject("adodb.recordset")
SQL = "select image_blob from images2 where id = " & Request("id")
rs.Open SQL, strConnect, 1, 3
Set Jpeg = Server.CreateObject("Persits.Jpeg")
' Open image directly from recordset
Jpeg.OpenBinary rs("image_blob").Value
' Resize
jpeg.Width = Request("Width")
' Set new height, preserve original aspect ratio
jpeg.Height = jpeg.OriginalHeight * jpeg.Width / jpeg.OriginalWidth
Jpeg.SendBinary
rs.Close
%>

Output to Memory
<%
Set rs = Server.CreateObject("adodb.recordset")
rs.Open "images", strConnect, 1, 3
rs.AddNew
rs("image_blob").Value = Jpeg.Binary
rs.Update
%>


--------------------------------------------------------------------------------

ASp使用AspJpeg组件制作透明文字水印
技术支持:
   1、aspjpeg能对图片水印进行透明度调整,不能对文字水印调整,
   2、aspjpeg支持Binary,可以Jpeg.OpenBinary读取,可以Jpeg.sendBinary,也可Jpeg.Binary赋值
思路:
   1、把原始的图片数据二进制度赋值给TempA,
   2、将文字水印处理后的图片数据二进制赋值给TempB,
   3、以TempB作为"图片水印",附加在TempA上,调整透明度,输出就ok了

思路很简单,代码也很简单:

<%
LocalFile="d:\apple.jpg"
TargetFile="d:\myapple.jpg"
Dim Jpeg
Set Jpeg = Server.CreateObject("Persits.Jpeg")
If Err.Number=-2147221005 then
Response.write "没有这个组件,请安装!"'检查是否安装AspJpeg组件
Response.End()
End If
Jpeg.Open (LocalFile)'打开图片
If err.number then
Response.write"打开图片失败,请检查路径!"
Response.End()
End if
Dim TempA '原始图片的二进制数据
Dim TempB '加了不透明文字水印的图片
Dim TempC '最终效果
TempA=Jpeg.Binary'将原始数据赋给TempA
'=========加文字水印=================
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 = 5'输出质量
Jpeg.Canvas.PrintText Jpeg.OriginalWidth/2-150,Jpeg.OriginalHeight/2,"www.Tsingfeng.com"'水印位置及文字
TempB=Jpeg.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.3是透明度
TempC=MyJpeg.Binary'将最终结果赋值给TempC,这时也可以生成目标图片了
response.BinaryWrite TempC'将二进输出给浏览器
MyJpeg.Save (TargetFile)
set TempA=nothing
set TempB=nothing
set TempC=nothing
Jpeg.close
MyJpeg.Close
Logo.Close
%>

 

-----------------------------------------------------------------------------------------------------

AspJpeg组件给图片加透明图片水印

为图片加水印
Dim Jpeg,Jpeg1
'建立实例
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Set Jpeg1 = Server.CreateObject("Persits.Jpeg")
'打开要加水印的图片
Jpeg.Open Server.mappath(路径)
'透明图片水印图
Jpeg1.Open Server.mappath("../Images/sy.gif")
'合并图
Jpeg.Canvas.DrawImage 0,Jpeg.OriginalHeight/2-33,Jpeg1,0.6,&HFFFFFF
' 保存文件
Jpeg.Save Server.mappath(路径)
' 注销对象
Set Jpeg = Nothing
Set Jpeg1 = Nothing
加透明图片水印,实际上就是将两个图合并,最关键的就是这一句:

Jpeg.Canvas.DrawImage Jpeg.OriginalWidth/2-22,Jpeg.OriginalHeight/2-33,Jpeg1,0.6,&HFFFFFF

其中0.6是透明度,1是不透明,值越小,透明越大,0就什么也看不见了。&HFFFFFF这个参数是最关键的,这是透明图片水印图的背景色,这个参数必须与透明图片水印图的背景一样,不然的话就实现不了透明了。就是我们不想看到的那一部分色


------------------------------------------------------------------------------------------
AspJpeg1.8 版本之前未提供 PrintTextEx 方法,实现文字透明水印是相当麻烦的,基本思路是这样的:
AspJpeg 支持透明图片水印 DrawImage,所以采用图片水印来间接实现文字透明水印。
1.读取原始图片内容赋于A
2.将加入文字水印的图片内容赋于B
3.将B作为水印图片附加在A上,调整透明度并输出。

从AspJpeg1.8 版本开始,AspJpeg 提供了比 PrintText 更为灵活的文本绘图方法PrintTextEx,PrintTextEx 使用FreeType?开源
程序库,可以在任何背景上呈现高品质的反锯齿文本。

这是一个ASP版本的利用PrintTextEx方法产生文字透明水印简单示例程序:

<%  
Dim objJpeg  
Dim strText  
Set objJpeg = Server.CreateObject("Persits.Jpeg")      
objJpeg.Open Server.MapPath("t.jpg")          
strText = "Copyright ? 2008 Abo BloG" 
objJpeg.Canvas.Font.Size = 30  
objJpeg.Canvas.Font.Color = &HFF0000    '十六进制颜色值  
objJpeg.Canvas.Font.Opacity = 0.7    '不透明度,1为不透明  
objJpeg.Canvas.PrintTextEx strText, objJpeg.Width/2, objJpeg.Height-20, objJpeg.WindowsDirectory & "\Fonts\Arial.ttf"   
objJpeg.Save Server.MapPath("tt.jpg")  
Set objJpeg = Nothing 
%> 

PrintTextEx 方法参考:
Function PrintTextEx(Text As String, X As Long, Y As Long, FontPath As String) As Long

Text - 要打印的文字字符串(Unicode格式),如果含有CR/LR字符则多行显示。
X, Y - 打印位置,XY轴坐标。
FontPath - 指定字体文件的物理路径。只要知道字体路径即可,并不需要系统注册。

返回值:返回文本宽度,如果字符串分割为多行,则返回宽度最长的。

以下字体属性影响PrintTextEx:

Font.Color - 指定当前文字颜色,以一个十六进制值来表示,例如:&HFF0000FF 蓝色
Font.Rotation - 旋转角度
Font.Size - 指定文字大小,单位像素(px)
Font.Spacing - 行距
Font.Width - 指定文本宽度,超出自动换行。
Font.Align - 指定文本对齐方式。0-左(默认),1-右,2-居中,3-两端对齐,当值为非0时,必须指定Font.Width值
Font.Opacity - 指定文本的不透明度,有效值范围[0-1],0完全透明,1完全不透明

-------------------------------------------------------------------------------------------------


<%

Sub   CreateView(Image1,Image2)  
   
  '//Image1原图(被处理图片)  
  '//Image2小图片(需要附加的小图标,最好是gif得透明图片)  
  '//Tmpimage豫览图  
  '//ImageMode是否添加边框  
   
  upload_ViewType=0
  LogoPath   =   Image2
  Set   Logobox   =   Server.CreateObject("Persits.Jpeg")  
  Logobox.Open   LogoPath '//读取添加的图片。  
  Logobox.Width   =   100 '//用做水印的图片的宽度值(像素)  
  Logobox.Height   =   20 '//用做水印的图片的高度值(像素)
  '//读取原图,并准备添加水印。  
  Set   ogvbox   =   Server.CreateObject("Persits.Jpeg")       '//读取要处理的原文件。        
  ogvbox.Open   Trim(Image1)
  Set   midogvbox   =   Server.CreateObject("Persits.Jpeg")
  midogvbox.Open  Trim(Image1)
  midogvbox.Width = 200
  midogvbox.Height = (midogvbox.Originalheight/midogvbox.OriginalWidth)*200
  imgname=mid(Image1,InStrRev(Image1,"\")+1)
  imgpath=left(Image1,InStrRev(Image1,"\"))
  midogvbox.Save imgpath&"mid"&imgname  
  set midogvbox=nothing
   
  If   ogvbox.OriginalWidth<Cint(ImageWidth)   or   ogvbox.Originalheight<Cint(ImageHeight)   Then  
  F_Viewname=""  
  Set   ogvbox   =   Nothing  
  Exit   Sub  
  Else
  ogvbox.Canvas.Pen.Color   =   &HFFff00'//增加水印后图片的边框色彩。  
  ogvbox.Canvas.Pen.Width   =   1 '//增加水印后图片的边框宽度。  
  ogvbox.Canvas.Brush.Solid   =   False '//边框内是否填充颜色,你可以试试看值为True时的效果^o^  
  ogvbox.DrawImage ogvbox.width-105,ogvbox.height-25,Logobox,1,&HFFFFFF'//水印图片的起始坐标,我这里是放在图片的正中间。0.4是透明度,我这里是半透明,1表示不透明  
  'ogvbox.Canvas.Bar   0,   0,   ogvbox.Width,   ogvbox.Height '//水印可用的范围。我这里表示左上角至右下角,即整张图片的任意位置都可加水印。
  ogvbox.Save Image1  '//根据以上参数生成增加水印后的图片文件
  'ogvbox.Width   =   ogvbox.width  
  'ogvbox.height   =   ogvbox.height  
  'ogvbox.Sharpen   1,   120     
  'ogvbox.Save   Server.MapPath(Tmpimage) '//生成增加水印后的图片的预览图片。  
  End   If  
  Set   ogvbox=Nothing  
  Set   Logobox=Nothing  
  end   sub
 %>
 
http://hehemumu.cn/viewthread.php?tid=238

posted on 2009-04-30 10:00  韩显川  阅读(618)  评论(0编辑  收藏  举报

导航