此文之後將會在個人新博客更新,有任何疑問可在個人新博文中提出html
https://blog.clso.fun/posts/2019-03-02/vb-net-webp.htmlgit
WebP 格式是谷歌開發並發展的一種最新的網絡圖片格式,具備壓縮率高、解碼快、免版權、開源等優勢。github
大部分先進的網頁瀏覽器、圖片瀏覽器都支持該格式,Windows用戶能夠經過安裝 WebP Codec for Windows 在系統中查閱WebP圖片。web
雖然 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 文件便可。post
下面的測試代碼,爲我修改版的 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 的支持,而再也不須要第三方的類庫。