AspJpeg是一款功能強大的基於Microsoft IIS環境的圖片處理組件,網路上對其進行詳細和深入介紹的中文文章並不多,即使有一般也只是牽涉到圖片縮圖和圖片浮水印,這與其為英文版本有著密切的關係。
AspJpeg最新版本下載、更多例子及詳細的線上對象參考手冊:
http://www.aspjpeg.com/
1、什麼是AspJpeg?
AspJpeg是一款功能強大的基於Microsoft IIS環境的圖片處理組件,網路上對其進行詳細和深入介紹的中文文章並不多,即使有一般也只是牽涉到圖片縮圖和圖片浮水印,這與其為英文版本有著密切的關係。
AspJpeg可以使用很少的代碼在您的ASP/ASP.Net應用程式上動態建立高品質的縮圖象,支援的圖象格式有:JPEG, GIF, BMP, TIFF, PNG
AspJpeg可以做到:
圖片合并
圖片切割
圖象特效
資料庫支援
驗證碼技術
產生縮圖片
產生浮水印圖片
GIF動態圖片建立、修改
...
2、AspJpeg功能摘要
* 支援JPEG, GIF, BMP, TIFF 和 PNG 格式圖片來源
* 圖片可以來源於磁碟、記憶體、或者記錄集(資料庫)
* 調整後的圖片可以儲存到磁碟、記憶體、或者HTTP流
* 支援三種更改大小演算法:Nearest Neighbor、Bilinear、Bicubic
* 可以在圖片之上添加圖畫或者文字,支援TrueType和Type 1字型
* 詞語自動換行,文本對齊:左、右、置中、兩端,圖片旋轉
* 支援畫中畫
* 剪下,翻轉,旋轉,銳利化,灰階調節
* 可以調節壓縮比率,以得到最佳輸出效果和大小
* 從JPEG映像中提取EXIF和的IPTC中繼資料
* 在更改圖片的時候儲存中繼資料
* IPTC中繼資料的添加和編輯
* CMYK到RGB轉換
* 棕褐色濾境(老化相片樣式)
* 從圖象中對任意象素進行讀/寫存取
* PNG Alpha 通道支援
* GIF透明支援
* 亮度,對比和飽和度的調整
* GIF輸出,透明度和動畫儲存
* JPEG到GIF格式轉換
3、AspJpeg系統需求
Windows NT/2000/XP/2003/Vista, 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安裝
全新安裝:
* 到官方網站下載30天全功能評估版本,分32位版(aspjpeg.exe,截止目前的版本為2.0,檔案大小:1.75M,最後更新日期:2008.01.28)和64位版(aspjpeg64.exe,截止目前的版本為2.0,檔案大小:1.35M,最後更新日期:2008.02.25,不包含文檔)
* 執行下載的aspjpeg.exe或aspjpeg64.exe
* 在提示輸入序號的時候輸入有效序號即可,不輸入即代表將使用30天評估版本,可以更改註冊表裡的RegKey進行註冊
* 如果安裝位置磁碟格式為NTFS,則可能出現存取權限問題,需手工設定匿名使用者有讀取aspjpeg.exe的許可權。
更新安裝:
如果之前有裝過其它版本的AspJpeg組件,則需要先卸載原來的組件,再進行新版本的安裝。
先停止IIS:Net Stop iisadmin /y
卸載舊版組件:regsvr32 /u Path/aspjpeg.dl(Path為安裝路徑)
重啟IIS:Net Start w3svc
然後再進行全新安裝或複製Bin目錄下的AspJpeg.dll檔案到安裝目錄進行手工安裝:
程式碼 程式碼
regsvr32 Path/aspjpeg.dll(Path為安裝路徑)
如果在正常安裝過程中沒有輸入序號或更新安裝則需要在註冊表中加入以下項進行註冊,為方便起見您可以直接將以下代碼儲存為key.reg文檔並匯入註冊表:
程式碼 程式碼
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Persits Software\AspJpeg\RegKey]
@="17361-38566-42221"
另外,可以通過代碼層由ASPJpeg對象的RegKey屬性來設定註冊碼,如下:
view plaincopy to clipboardprint?
1. Set Jpeg = Server.CreateObject("Persits.Jpeg")
2. Jpeg.RegKey = "12345-67890-12345"
3. ...
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Jpeg.RegKey = "12345-67890-12345"
...
.RegKey指定註冊表,如果這個屬性沒有設定AspJpeg組件將在系統註冊表中尋找一個指定的註冊碼.
5、如何建立一個AspJpeg執行個體?
程式碼 程式碼
Set Jpeg = Server.CreateObject("Persits.Jpeg")
6、如何查看到期時間(是否註冊成功)?
view plaincopy to clipboardprint?
1. Set Jpeg = Server.CreateObject("Persits.Jpeg")
2. Response.Write Jpeg.Expires
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Response.Write Jpeg.Expires
如果這個屬性返回9/9/9999它意味著在使用一個永久的註冊碼。
否則為:安裝日期加1個月期限
7、如何用AspJpeg組件建立圖片縮圖?
view plaincopy to clipboardprint?
1. <%
2. Set Jpeg = Server.CreateObject("Persits.Jpeg") '建立ASPJpeg對象執行個體
3. Path = Server.MapPath("../images/apple.jpg") '設定圖片路徑
4. Jpeg.Open Path '開啟圖片
5. '調整寬度和高度為原來的50%
6. Jpeg.Width = Jpeg.OriginalWidth / 2
7. Jpeg.Height = Jpeg.OriginalHeight / 2
8. Jpeg.Save Server.MapPath("apple_small.jpg") '儲存圖片到磁碟
9. Jpeg.Close:Set Jpeg = Nothing
10. %>
<%
Set Jpeg = Server.CreateObject("Persits.Jpeg") '建立ASPJpeg對象執行個體
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組件建立圖片浮水印?
view plaincopy to clipboardprint?
1. <%
2. Set Jpeg = Server.CreateObject("Persits.Jpeg")
3. Jpeg.Open Server.MapPath("2.jpg")
4. '開始寫文字
5. Jpeg.Canvas.Font.Color = &000000 'red 顏色
6. Jpeg.Canvas.Font.Family = "Courier New" '字型
7. Jpeg.Canvas.Font.Bold = True '是否加粗
8. Jpeg.Canvas.Print 10, 10, "Copyright (c) XYZ, Inc."
9. '列印座標x 列印座標y 需要列印的字元
10. '以下是對圖片進行邊框處理
11. Jpeg.Canvas.Pen.Color = &H000000 'black 顏色
12. Jpeg.Canvas.Pen.Width = 2 '畫筆寬度
13. Jpeg.Canvas.Brush.Solid = False '是否加粗處理
14. Jpeg.Canvas.Bar 1, 1, Jpeg.Width, Jpeg.Height
15. '起始X座標 起始Y座標 輸入長度 輸入高度
16. Jpeg.Save Server.MapPath("1.jpg") '儲存
17. %>
<%
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Jpeg.Open Server.MapPath("2.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("1.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執行個體對象
view plaincopy to clipboardprint?
1. <%
2. Set Jpeg1 = Server.CreateObject("Persits.Jpeg")
3. Set Jpeg2 = Server.CreateObject("Persits.Jpeg")
4. Jpeg1.Open Server.MapPath("t.jpg")
5. Jpeg2.Open Server.MapPath("t1.jpg")
6. Jpeg1.Canvas.DrawImage 10, 10, Jpeg2 ' optional arguments omitted
7. jpeg1.save Server.mappath("tt.jpg")
8. %>
<%
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.
view plaincopy to clipboardprint?
1. <%
2. Set Jpeg = Server.CreateObject("Persits.Jpeg")
3. Jpeg.Open Server.MapPath("t.jpg")
4. jpeg.Crop 20, 30, jpeg.Width - 20, jpeg.Height - 10
5. jpeg.save Server.mappath("tt.jpg")
6. Response.write("<img src=tt.jpg>")
7. %>
<%
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組件建立驗證碼?
建立驗證碼原理上和建立浮水印差不多。
view plaincopy to clipboardprint?
1. <%
2. function make_randomize(max_len,w_n) 'max_len 產生長度,w_n:0 可能包含字母,1:只為數字
3. randomize
4. for intcounter=1 to max_len
5. whatnext=int((1-0+1)*rnd+w_n)
6. if whatnext=0 then
7. upper=122
8. lower=97
9. else
10. upper=57
11. lower=48
12. end if
13. strnewpass=strnewpass & chr(int((upper-lower+1)*rnd)+lower)
14. next
15. make_randomize=strnewpass
16. end function
17.
18. '產生安全碼的圖片。
19. random_num=make_randomize(4,1) '產生4位元字的安全碼
20. session("random_num")=random_num '為麼調用session,沒有session的安全碼是完全沒有意義的。呵呵 .
21.
22. Set Jpeg = Server.CreateObject("Persits.Jpeg") '調用組件
23. Jpeg.Open Server.MapPath("t.jpg") '開啟準備的圖片
24. Jpeg.Canvas.Font.Color = &HFFFFFF
25. Jpeg.Canvas.Font.Family = "Arial Black"
26. Jpeg.Canvas.Font.Bold = false
27. Jpeg.Canvas.PrintText 0, -2, random_num
28. jpeg.save Server.MapPath("tt.jpg") '儲存
29. %>
30. <img src="tt.jpg" border="0" align="absmiddle">
<%
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使用者手冊:
view plaincopy to clipboardprint?
1. '從記憶體中開啟圖象
2. Opening Images from Memory
3. <% ' Using ADO, open database with an image blob
4. strConnect = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/aspjpeg.mdb")
5. Set rs = Server.CreateObject("adodb.recordset")
6. SQL = "select image_blob from images2 where id = " & Request("id")
7. rs.Open SQL, strConnect, 1, 3
8. Set Jpeg = Server.CreateObject("Persits.Jpeg")
9. ' Open image directly from recordset
10. Jpeg.OpenBinary rs("image_blob").Value
11. ' Resize
12. jpeg.Width = Request("Width")
13. ' Set new height, preserve original aspect ratio
14. jpeg.Height = jpeg.OriginalHeight * jpeg.Width / jpeg.OriginalWidth
15. Jpeg.SendBinary
16. rs.Close
17. %>
18.
19. '輸出到記憶體
20. <%
21. ...
22. Set rs = Server.CreateObject("adodb.recordset")
23. rs.Open "images", strConnect, 1, 3
24. rs.AddNew
25. rs("image_blob").Value = Jpeg.Binary
26. rs.Update
27. ...
28. %>
'從記憶體中開啟圖象
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
%>
'輸出到記憶體
<%
...
Set rs = Server.CreateObject("adodb.recordset")
rs.Open "images", strConnect, 1, 3
rs.AddNew
rs("image_blob").Value = Jpeg.Binary
rs.Update
...
%>
13、AspJpeg組件建立GIF動畫?
view plaincopy to clipboardprint?
1. <%
2. Set Jpeg = Server.CreateObject("Persits.Jpeg")
3. Set Gif = Jpeg.Gif ' Obtain GIF management object
4.
5. MarketShare = 6 ' initial market share of hypothetical XYZ company
6. ' create a 5-frame animated gif
7. For i = 1 to 5
8. Gif.AddFrame 300, 200, 0, 0
9.
10. Gif.PenColor = 10
11. Gif.BrushColor = 10
12. Gif.DrawBar 0, 0, 300, 200
13.
14. Gif.PenColor = 201
15. Gif.FontFamily = "Courier"
16. Gif.PrintText 18, 15, "XYZ, Inc. Market Share"
17. Gif.PrintText 120, 50, 2002 + i
18.
19. ' Draw pie chart
20. Gif.PenColor = 0
21. Gif.BrushColor = 30
22. Gif.DrawPie 150, 130, 50, 0, MarketShare * 360 / 100
23. Gif.BrushColor = 20
24. Gif.DrawPie 150, 130, 50, MarketShare * 360 / 100, 360
25.
26. Gif.PenColor = 210
27. Gif.PrintText 200, 100, MarketShare & "%"
28. MarketShare = MarketShare * 2 - 3 ' market share almost doubles every year!
29. ' increase delay on the last frame
30. if i = 5 then Gif.Delay = 300 ' 3 sec
31. Next
32. ' Save
33. Gif.Save Server.MapPath("chart.gif")
34. %>
35. <IMG SRC="chart.gif">