在 Web 應用程式中動態產生圖片縮略圖是常見需求。本文提供基於 System.Drawing 命名空間的完整實作方案,支援指定寬高輸出 JPEG 格式縮略圖,並包含完整的資源釋放機制。
System.IO 命名空間處理檔案流CreateThumbnails 類別封裝核心邏輯ImageAbortDummyCallback 控制縮圖產生流程Function CreateJPEGThumbnail(ByVal inSourceFile As String, _
ByVal inDestinationFile As String, _
ByVal ThumbWidth As Integer, _
ByVal ThumbHeight As Integer) As Boolean
Dim imageFile As System.Drawing.Image
Dim outputFstream As New FileStream(inSourceFile, FileMode.Open, FileAccess.Read)
' 建立檔案流支援同步與非同步讀寫操作
Dim ImageAbortCallBack As System.Drawing.Image.GetThumbnailImageAbort
' 回呼方法:返回 true 表示提前終止 GetThumbnailImage 執行
imageFile = System.Drawing.Image.FromStream(outputFstream)
ImageAbortCallBack = New System.Drawing.Image.GetThumbnailImageAbort(AddressOf ImageAbortDummyCallback)
' 產生指定尺寸的縮略圖
imageFile = imageFile.GetThumbnailImage(ThumbWidth, ThumbHeight, ImageAbortCallBack, IntPtr.Zero)
' IntPtr:平台特定類型,用於代表指標或控制代碼
' 以 JPEG 格式儲存
imageFile.Save(inDestinationFile, System.Drawing.Imaging.ImageFormat.Jpeg)
' 完整資源釋放
outputFstream.Close()
outputFstream = Nothing
imageFile = Nothing
Return True
End Function
Function ImageAbortDummyCallback() As Boolean
Return False
End Function
| 元件 | 說明 |
|---|---|
FileStream | 提供檔案周圍的 Stream 包裝,支援同步/非同步讀寫 |
GetThumbnailImageAbort | 委派類型,控制縮圖產生是否提前終止 |
IntPtr.Zero | 平台特定指標類型,此處傳遞零值表示不使用特定回呼資料 |
ImageFormat.Jpeg | 指定輸出格式為 JPEG,平衡品質與檔案大小 |
程式碼展示了標準的資源釋放模式:
Close() 關閉檔案流Nothing 協助 GC 回收此實作適合整合至 ASP.NET Web Forms 或 MVC 專案中,可作為上傳圖片自動產生縮略圖的核心元件使用。