原文: 利用 LibWebP-NET 解碼與編碼 WebP 格式圖檔
WebP 格式是谷歌開發并發展的一種最新的網絡圖檔格式,具有壓縮率高、解碼快、免版權、開源等優點。
大部分先進的網頁浏覽器、圖檔浏覽器都支援該格式,Windows使用者可以通過安裝
WebP Codec for Windows在系統中查閱WebP圖檔。
雖然 WebP 是開源格式,但目前 .NET 平台對 WebP 的支援并不好,隻能依靠第三方的類庫來加載 WebP 格式。
在這裡我推薦
LibWebP-NET這個開源類庫,可以在 .NET 中對 WebP 圖檔進行解碼和編碼。
LibWebP-NET 隻是簡單的對于WebP的C++類庫的一個.NET封包,其核心代碼仍在 libwebp.dll 這個動态連結庫檔案中,是以不支援在普通的ASP.NET空間中運作。
并且因為動态連結庫對于系統的限制,是以有x86和x64兩個版本的C++類庫檔案,應用于不同的作業系統。
我個人推薦您在.NET工程屬性的編譯選項中,使用x86相容模式,這樣隻需要附上x86版的 libwebp.dll 檔案即可。
下面的測試代碼,為我修改版的 LibWebPNET 源碼的類庫檔案,您可以
點選這裡下載下傳。
我僅将其中快速編碼和解碼函數設定為靜态方法(原版需要執行個體化相關的解碼類,很繁瑣)。
使用前,記得引用 Imazen.WebP.dll 類庫,并将 libwebp.dll 動态連結庫釋放到主程式的運作目錄。
解碼方式非常簡單
Dim bs As Byte() = IO.File.ReadAllBytes("指定的WebP圖檔")
Dim img As Bitmap = Imazen.WebP.SimpleDecoder.DecodeFromBytes(bs, bs.Length)
這樣即可解碼 WebP 圖檔為.NET可識别的圖檔對象,應用于其他各種操作。
編碼方式則略微複雜
Dim pic As Image = Image.FromFile("原圖檔位置")
' WebP隻支援 Format32bppArgb 和 Format32bppRgb 兩種像素格式
' 是以有時候需要改碼,重繪一個圖像
Using bmp As New Bitmap(pic.Width, pic.Height, Imaging.PixelFormat.Format32bppArgb)
' 将圖檔重繪到新畫布
Using g As Graphics = Graphics.FromImage(bmp)
g.DrawImage(pic, 0, 0, pic.Width, pic.Height)
End Using
' 轉碼并儲存檔案
Using fs As IO.FileStream = IO.File.Create("新圖檔位置.webp")
Imazen.WebP.SimpleEncoder.Encode(bmp, fs, 100)
End Using
End Using
WebP 編碼僅支援 Format32bppArgb 和 Format32bppRgb,而目前主流的網絡圖檔格式并非這兩種像素格式,是以我們在轉換前,需要自己将圖檔轉碼。
通過 LibWebP-NET,我們可以很容易的擁抱 WebP 這種未來的網絡圖檔格式。希望 .NET 以後也可以内置對于 WebP 的支援,而不再需要第三方的類庫。