天天看點

利用 LibWebP-NET 解碼與編碼 WebP 格式圖檔

原文: 利用 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 的支援,而不再需要第三方的類庫。