利用 LibWebP-NET 解码与编码 WebP 格式图片

此文之后将会在个人新博客更新,有任何疑问可在个人新博文中提出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 的支持,而再也不须要第三方的类库。

相关文章
相关标签/搜索