ASP wsImage組件添加水印的實用代碼_ASP教程

      編輯Tag賺U幣

      推薦:ASP組件AspJpeg(加水印)生成縮略圖等使用方法
      ASPJPEG是一款功能相當(dāng)強大的圖象處理組件,用它可以輕松地做出圖片的縮略圖和為圖片加上水印功能。下面簡單介紹一下使用方法,需要的朋友可以了解下

      ASP給圖片加水印是需要組件的...常用的有aspjpeg軟件和中國人自己開發(fā)的wsImage軟件,可以上網(wǎng)搜索下載這兩個軟件,推薦使用咱們中國人自己開發(fā)的wsImage,畢竟是中文版,容易操作.

      注冊組件的方法:
      命令提示符下輸入"regsvr32 [Dll路徑]" 就可以了.
      圖片添加水印無非就是獲得圖片大小,然后把水印寫上去..ASP代碼只是起個控制組件的作用.用代碼來說明一切吧.

      一:獲得圖片大小(這里是用象素值表示的.學(xué)PhotoShop的朋友都應(yīng)該明白)
      復(fù)制代碼 代碼如下:www.wf0088.com

      <%
      set obj=server.CreateObject("wsImage.Resize") ''調(diào)用組件
      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
      %>

      ''----------------------------------------------------------------''
      二:添加文字水印
      復(fù)制代碼 代碼如下:www.wf0088.com

      <%
      set obj=server.CreateObject("wsImage.Resize")
      obj.LoadSoucePic server.mappath("25.jpg") ''裝載圖片
      obj.Quality=75
      obj.TxtMarkFont = "華文彩云" ''設(shè)置水印文字字體
      obj.TxtMarkBond = false ''設(shè)置水印文字的粗細
      obj.MarkRotate = 0 ''水印文字的旋轉(zhuǎn)角度
      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
      %>

      ''----------------------------------------------------------------''
      三:添加圖片水印
      復(fù)制代碼 代碼如下:www.wf0088.com

      <%
      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組件的另外兩個主要用法.包括:
      剪裁圖片,生成圖片的縮略圖.
      還是以我得習(xí)慣,用代碼加注釋說明:
      剪裁圖片:
      復(fù)制代碼 代碼如下:www.wf0088.com

      <%
      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代表的是裁減的寬帶和高和高度.
      ''----------------------------------------------------------------''
      生成圖片縮略圖:
      復(fù)制代碼 代碼如下:www.wf0088.com

      <%
      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
      %>

      詳細說明:
      產(chǎn)生縮略圖共有四種導(dǎo)出方式
      (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---------------------------------------------------------------------------------------
      復(fù)制代碼 代碼如下:www.wf0088.com

      <%
      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函數(shù)
      filename=filename&filename9 '加上文件后綴,規(guī)則為生成的隨機文件名加上原文件后綴
      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 '將原始數(shù)據(jù)賦給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 '輸出質(zhì)量
      Jpeg.Canvas.PrintText Jpeg.OriginalWidth/2-100,Jpeg.OriginalHeight/2+20,"www.my9933.com" '水印位置及文字
      bb=Jpeg.Binary '將文字水印處理后的值賦給bb,這時,文字水印沒有不透明度
      '============調(diào)整文字透明度================
      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 '將最終結(jié)果賦值給cc,這時也可以生成目標(biāo)圖片了
      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給圖片加水印,生成縮略圖
      復(fù)制代碼 代碼如下:www.wf0088.com

      <%
      FileName="1.jpg"
      Set Jpeg = Server.CreateObject("Persits.Jpeg")
      ' 獲取源圖片路徑
      Path = Server.MapPath(FileName)
      ' 打開源圖片
      'response.write(Path)
      Jpeg.Open Path
      ' 設(shè)定生成縮略圖細節(jié) 這里有很多種設(shè)定方法 下面的方法是先判斷寬高比 然后按比例縮放
      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
      ' 設(shè)定銳化效果
      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
      '自動產(chǎn)生縮掠圖結(jié)束
      '大圖片打水印開始
      ' 建立實例
      Set Jpeg = Server.CreateObject("Persits.Jpeg")
      ' 打開目標(biāo)圖片
      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
      '大圖片打水印結(jié)束
      %>

      4---------------------------------------------------------------------------------------
      利用ASPJPEG組建加水印ASP實現(xiàn)代碼
      復(fù)制代碼 代碼如下:www.wf0088.com

      <%
      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 '將原始數(shù)據(jù)賦給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 ' '輸出質(zhì)量
      Jpeg.Canvas.PrintText Jpeg.OriginalWidth/2-40,Jpeg.OriginalHeight/2-10,"網(wǎng)站建設(shè)" '水印位置及文字
      bb=Jpeg.Binary '將文字水印處理后的值賦給bb,這時,文字水印沒有不透明度
      '============調(diào)整文字透明度================
      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 '將最終結(jié)果賦值給cc,這時也可以生成目標(biāo)圖片了
      Response.BinaryWrite cc '將二進輸出給瀏覽器
      MyJpeg.Save (TargetFile)
      set aa = nothing
      set bb = nothing
      set cc = nothing
      Jpeg.Close
      MyJpeg.Close
      Logo.Close
      End If
      '加水印
      %>

      分享:ASP中DateAdd函數(shù)中日期相加或相減使用方法
      本文將介紹ASP中DateAdd函數(shù)中日期相加或相減使用方法,需要了解的朋友可以參考下

      來源:模板無憂//所屬分類:ASP教程/更新時間:2013-04-22
      相關(guān)ASP教程