ASP wsImage组件添加水印的实用代码

  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,则对原图进行放大。

  2---------------------------------------------------------------------------------------

  

复制代码 代码如下:

  <%

  Dim stream1,stream2,istart,iend,filename

  istart=1

  vbEnter=Chr(13)&Chr(10)

  function getvalue(fstr,foro,paths)'fstr为接收的名称,foro布尔false为文件上传,true 为普通字段,path为上传文件存放路径

  if foro then

  getvalue=""

  istart=instring(istart,fstr)

  istart=istart+len(fstr)+5

  iend=instring(istart,vbenter+"-----------------------------")

  if istart>5+len(fstr) then

  getvalue=substring(istart,iend-istart)

  else

  getvalue=""

  end if

  else

  istart=instring(istart,fstr)

  istart=istart+len(fstr)+13

  iend=instring(istart,vbenter)-1

  filename=substring(istart,iend-istart)

  filename9=right(getfilename(filename),4)'取原文件后缀

  filename8=year(now())&month(now())&day(now())&hour(now())&minute(now())&second(now())&int(9*10^3*rnd)+10^3'取随机文件名,

  '如果你要加长文件名,请修改(100*rnd)中100的值

  filename=replace(getfilename(filename),getfilename(filename),filename8) '替换原文件名,活用replace函数

  filename=filename&filename9 '加上文件后缀,规则为生成的随机文件名加上原文件后缀

  istart=instring(iend,vbenter+vbenter)+3

  iend=instring(istart,vbenter+"-----------------------------")

  filestart=istart

  filesize=iend-istart-1

  objstream.position=filestart

  Set sf = Server.CreateObject("ADODB.Stream")

  sf.Mode=3

  sf.Type=1

  sf.Open

  objstream.copyto sf,FileSize

  if filename<>"" then

  Set rf = Server.CreateObject("Scripting.FileSystemObject")

  i=0

  fn=filename

  while rf.FileExists(server.mappath(paths+fn))

  fn=cstr(i)+filename

  i=i+1

  wend

  filename=fn

  sf.SaveToFile server.mappath(paths+filename),2

  '''''''''''''''''''''''''''''''''''''''''''''''''''

  Dim Jpeg

  Set Jpeg = Server.CreateObject("Persits.Jpeg")

  If -2147221005=Err then

  Response.write "没有这个组件,请安装!" '检查是否安装AspJpeg组件

  Response.End()

  End If

  Jpeg.Open (server.mappath(paths+filename)) '打开图片

  If err.number then

  Response.write"打开图片失败,请检查路径!"

  Response.End()

  End if

  Dim aa

  aa=Jpeg.Binary '将原始数据赋给aa

  '=========加文字水印=================

  Jpeg.Canvas.Font.Color = &Hff0000 '水印文字颜色

  Jpeg.Canvas.Font.Family = Arial'字体

  Jpeg.Canvas.Font.Bold = True '是否加粗

  Jpeg.Canvas.Font.Size = 30'字体大小

  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.my9933.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 (server.mappath(paths+filename))

  set aa=nothing

  set bb=nothing

  set cc=nothing

  Jpeg.close

  MyJpeg.Close

  Logo.Close

  '''''''''''''''''''''''''''''''''''''''''''''''''''''

  end if

  getvalue=filename

  end if

  end function

  Function subString(theStart,theLen)

  dim i,c,stemp

  objStream.Position=theStart-1

  stemp=""

  for i=1 to theLen

  if objStream.EOS then Exit for

  c=ascB(objStream.Read(1))

  If c > 127 Then

  if objStream.EOS then Exit for

  stemp=stemp&Chr(AscW(ChrB(AscB(objStream.Read(1)))&ChrB(c)))

  i=i+1

  else

  stemp=stemp&Chr(c)

  End If

  Next

  subString=stemp

  End function

  Function inString(theStart,varStr)

  dim i,j,bt,theLen,str

  InString=0

  Str=toByte(varStr)

  theLen=LenB(Str)

  for i=theStart to objStream.Size-theLen

  if i>objstream.size then exit Function

  objstream.Position=i-1

  if AscB(objstream.Read(1))=AscB(midB(Str,1)) then

  InString=i

  for j=2 to theLen

  if objstream.EOS then

  inString=0

  Exit for

  end if

  if AscB(objstream.Read(1))<>AscB(MidB(Str,j,1)) then

  InString=0

  Exit For

  end if

  next

  if InString<>0 then Exit Function

  end if

  next

  End Function

  Private function GetFileName(FullPath)

  If FullPath <> "" Then

  GetFileName = mid(FullPath,InStrRev(FullPath, "\")+1)

  Else

  GetFileName = ""

  End If

  End function

  function toByte(Str)

  dim i,iCode,c,iLow,iHigh

  toByte=""

  For i=1 To Len(Str)

  c=mid(Str,i,1)

  iCode =Asc(c)

  If iCode<0 Then iCode = iCode + 65535

  If iCode>255 Then

  iLow = Left(Hex(Asc(c)),2)

  iHigh =Right(Hex(Asc(c)),2)

  toByte = toByte & chrB("&H"&iLow) & chrB("&H"&iHigh)

  Else

  toByte = toByte & chrB(AscB(c))

  End If

  Next

  End function

  %>

  3---------------------------------------------------------------------------------------

  用asp组件Persits.Jpeg给图片加水印,生成缩略图

  

复制代码 代码如下:

  <%

  FileName="1.jpg"

  Set Jpeg = Server.CreateObject("Persits.Jpeg")

  ' 获取源图片路径

  Path = Server.MapPath(FileName)

  ' 打开源图片

  'response.write(Path)

  Jpeg.Open Path

  ' 设定生成缩略图细节 这里有很多种设定方法 下面的方法是先判断宽高比 然后按比例缩放

  If Jpeg.OriginalWidth / Jpeg.OriginalHeight > 1 then

  Jpeg.Width = 98

  Jpeg.Height = int((98/Jpeg.OriginalWidth)*Jpeg.OriginalHeight)

  elseif Jpeg.OriginalWidth / Jpeg.OriginalHeight < 1 then

  Jpeg.Width = 98

  Jpeg.Height= int((98/Jpeg.OriginalWidth)*Jpeg.Height)

  end if

  ' 设定锐化效果

  Jpeg.Sharpen 1, 130

  ' 向指定路径生成缩略图

  Response.Write Server.MapPath(".")

  Jpeg.Save Server.MapPath(".")&"\small\"&filename

  'response.write filename1

  'response.write Server.MapPath("uploadpic/small")&"\"&filename1

  ' 注意这两个Session

  'Session("PPP0")=GP_curPath&FileName

  'Session("PPP1")=GP_curPath&"small"&FileName

  Set Jpeg = Nothing

  '自动产生缩掠图结束

  '大图片打水印开始

  ' 建立实例

  Set Jpeg = Server.CreateObject("Persits.Jpeg")

  ' 打开目标图片

  Path = Server.MapPath(FileName)

  ' 打开源图片

  Jpeg.Open Path

  ' 添加文字水印

  Jpeg.Canvas.Font.Color = &HFF0000' 红色

  Jpeg.Canvas.Font.Family = "宋体"

  Jpeg.Canvas.Font.Bold = True

  Jpeg.Canvas.Print 10, 10, "宏蓝科技"

  ' 保存文件

  Jpeg.Save Server.MapPath(".")&"\small\w_"&filename

  ' 注销对象

  Set Jpeg = Nothing

  '大图片打水印结束

  %>

  4---------------------------------------------------------------------------------------

  利用ASPJPEG组建加水印ASP实现代码

  

复制代码 代码如下:

  <%

  Class qswhImg

  dim aso

  Private Sub Class_Initialize

  set aso=CreateObject("Adodb.Stream")

  aso.Mode=3

  aso.Type=1

  aso.Open

  End Sub

  Private Sub Class_Terminate

  set aso=nothing

  End Sub

  Private Function Bin2Str(Bin)

  Dim I, Str

  For I=1 to LenB(Bin)

  clow=MidB(Bin,I,1)

  if ASCB(clow)<128 then

  Str = Str & Chr(ASCB(clow))

  else

  I=I+1

  if I <= LenB(Bin) then Str = Str & Chr(ASCW(MidB(Bin,I,1)&clow))

  end if

  Next

  Bin2Str = Str

  End Function

  Private Function Num2Str(num,base,lens)

  'qiushuiwuhen (2002-8-12)

  dim ret

  ret = ""

  while(num>=base)

  ret = (num mod base) & ret

  num = (num - num mod base)/base

  wend

  Num2Str = right(string(lens,"0") & num & ret,lens)

  End Function

  Private Function Str2Num(str,base)

  'qiushuiwuhen (2002-8-12)

  dim ret

  ret = 0

  for i=1 to len(str)

  ret = ret *base + cint(mid(str,i,1))

  next

  Str2Num=ret

  End Function

  Private Function BinVal(bin)

  'qiushuiwuhen (2002-8-12)

  dim ret

  ret = 0

  for i = lenb(bin) to 1 step -1

  ret = ret *256 + ascb(midb(bin,i,1))

  next

  BinVal=ret

  End Function

  Private Function BinVal2(bin)

  'qiushuiwuhen (2002-8-12)

  dim ret

  ret = 0

  for i = 1 to lenb(bin)

  ret = ret *256 + ascb(midb(bin,i,1))

  next

  BinVal2=ret

  End Function

  Function getImageSize(filespec)

  'qiushuiwuhen (2002-9-3)

  dim ret(3)

  aso.LoadFromFile(filespec)

  bFlag=aso.read(3)

  select case hex(binVal(bFlag))

  case "4E5089":

  aso.read(15)

  ret(0)="PNG"

  ret(1)=BinVal2(aso.read(2))

  aso.read(2)

  ret(2)=BinVal2(aso.read(2))

  case "464947":

  aso.read(3)

  ret(0)="GIF"

  ret(1)=BinVal(aso.read(2))

  ret(2)=BinVal(aso.read(2))

  case "535746":

  aso.read(5)

  binData=aso.Read(1)

  sConv=Num2Str(ascb(binData),2 ,8)

  nBits=Str2Num(left(sConv,5),2)

  sConv=mid(sConv,6)

  while(len(sConv)<nBits*4)

  binData=aso.Read(1)

  sConv=sConv&Num2Str(ascb(binData),2 ,8)

  wend

  ret(0)="SWF"

  ret(1)=int(abs(Str2Num(mid(sConv,1*nBits+1,nBits),2)-Str2Num(mid(sConv,0*nBits+1,nBits),2))/20)

  ret(2)=int(abs(Str2Num(mid(sConv,3*nBits+1,nBits),2)-Str2Num(mid(sConv,2*nBits+1,nBits),2))/20)

  case "FFD8FF":

  do

  do: p1=binVal(aso.Read(1)): loop while p1=255 and not aso.EOS

  if p1>191 and p1<196 then exit do else aso.read(binval2(aso.Read(2))-2)

  do:p1=binVal(aso.Read(1)):loop while p1<255 and not aso.EOS

  loop while true

  aso.Read(3)

  ret(0)="JPG"

  ret(2)=binval2(aso.Read(2))

  ret(1)=binval2(aso.Read(2))

  case else:

  if left(Bin2Str(bFlag),2)="BM" then

  aso.Read(15)

  ret(0)="BMP"

  ret(1)=binval(aso.Read(4))

  ret(2)=binval(aso.Read(4))

  else

  ret(0)=""

  end if

  end select

  ret(3)="width=""" & ret(1) &""" height=""" & ret(2) &""""

  getimagesize=ret

  End Function

  End Class

  SavefullPath="326151745wldn.jpg" '图片路径赋值 或 图片路径变量赋值

  '取得图片的宽度

  Set qswh = new qswhImg

  arr = qswh.getImageSize(Server.Mappath(SavefullPath))

  Set qswh = Nothing

  str_ImgWidth=arr(1)

  str_ImgHeight=arr(2)

  If Int(str_ImgWidth) > 600 Then

  str_ImgWidth = 600

  Else

  str_ImgWidth = str_ImgWidth

  End If

  '加水印

  If Int(str_ImgWidth) > 300 And Int(str_ImgHeight) > 100 Then

  LocalFile=Server.MapPath(SavefullPath)

  TargetFile=Server.MapPath(SavefullPath)

  Dim Jpeg

  Set Jpeg = Server.CreateObject("Persits.Jpeg")

  If -2147221005=Err then

  Response.Write("<script language='javascript'>alert('没有这个组件,请安装!');history.back();</script>") '检查是否安装AspJpeg组件

  Response.End()

  End If

  Jpeg.Open (LocalFile) '打开图片

  If err.number then

  Response.Write("<script language='javascript'>alert('打开图片失败,请检查路径!');history.back();</script>")

  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 = 20 '字体大小

  Jpeg.Canvas.Font.ShadowColor = &H000000 '阴影色彩

  Jpeg.Canvas.Font.ShadowYOffset = 1

  Jpeg.Canvas.Font.ShadowXOffset = 1

  Jpeg.Canvas.Brush.Solid = True

  Jpeg.Canvas.Font.Quality = 10 ' '输出质量

  Jpeg.Canvas.PrintText Jpeg.OriginalWidth/2-40,Jpeg.OriginalHeight/2-10,"网站建设" '水印位置及文字

  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.5 '0.3是透明度

  cc=MyJpeg.Binary '将最终结果赋值给cc,这时也可以生成目标图片了

  Response.BinaryWrite cc '将二进输出给浏览器

  MyJpeg.Save (TargetFile)

  set aa = nothing

  set bb = nothing

  set cc = nothing

  Jpeg.Close

  MyJpeg.Close

  Logo.Close

  End If

  '加水印

  %>