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

简介: 原文:利用 LibWebP-NET 解码与编码 WebP 格式图片WebP 格式是谷歌开发并发展的一种最新的网络图片格式,具有压缩率高、解码快、免版权、开源等优点。 大部分先进的网页浏览器、图片浏览器都支持该格式,Windows用户可以通过安装 WebP Codec for Windows 在系统中查阅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 的支持,而不再需要第三方的类库。

目录
相关文章
|
5月前
|
存储 编解码 自然语言处理
kali base64 编码和解码
kali base64 编码和解码
119 0
|
5月前
图片转base64 并根据格式加前缀
图片转base64 并根据格式加前缀
121 0
|
11月前
|
开发者
base64解码工具
base64解码工具
base64解码工具
|
11月前
|
XML 存储 JSON
Base64编码理解与实现(编码图片)
Base64是一种数据编码方式,目的是让数据符合传输协议的要求。 在项目中,将报文进行压缩、加密后,最后一步必然是使用base64编码,因为base64编码的字符串,更适合不同平台、不同语言的传输
185 0
|
存储 传感器 编解码
Qt开发笔记之编码x264码流并封装mp4(三):Qt使用x264库对.yuv文件编码为.h264文件
Qt开发笔记之编码x264码流并封装mp4(三):Qt使用x264库对.yuv文件编码为.h264文件
Qt开发笔记之编码x264码流并封装mp4(三):Qt使用x264库对.yuv文件编码为.h264文件
|
JSON API 语音技术
Python 技术篇-获取requests里的二进制文本并保存为音频、图片文件,提取requests里的多媒体信息
Python 技术篇-获取requests里的二进制文本并保存为音频、图片文件,提取requests里的多媒体信息
707 0
Python 技术篇-获取requests里的二进制文本并保存为音频、图片文件,提取requests里的多媒体信息
|
Web App开发 缓存 前端开发
关于图片的Base64编码
什么是Base64编码 Base64编码是一种图片处理格式,通过特定的算法将图片编码成一长串字符串,在页面上显示的时候,可以用该字符串来代替图片的url属性。 base64编码就是长得像下面这样子的代码: thunder://QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5naWZaWg== 上面代码大家都熟悉吧,迅雷下载链接哦,就是base64编码后的地址,所以以后看到这种:一堆连续字母,最后有1~2个"="的代码就是base64。
2271 0
.net 裁剪图片(不压缩)
命名空间: using System.Drawing; using System.Drawing.Imaging; /// /// 生成图片缩略文件 /// /// 图片源文件 /// 缩略图宽...
1051 0
|
Shell C# 图形学
.net 图片无损压缩
命名空间: using System.Drawing.Imaging; using System.Drawing; using System.Drawing.Drawing2D; #region GetPicThumbnail /// /// 无损压缩图片 ...
1445 0
相关产品
云迁移中心
推荐文章
更多