利用 LibWebP-NET 解码与编码 WebP 格式图片
此文以后将会在我的新博客更新,有任何疑问可在我的新博文中提出
https://blog.clso.fun/posts/2019-03-02/vb-net-webp.html
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, , , pic.Width, pic.Height)
End Using
' 转码并保存文件
Using fs As IO.FileStream = IO.File.Create("新图片位置.webp")
Imazen.WebP.SimpleEncoder.Encode(bmp, fs, )
End Using
End Using
WebP 编码仅支持 Format32bppArgb 和 Format32bppRgb,而目前主流的网络图片格式并非这两种像素格式,所以我们在转换前,需要自己将图片转码。
通过 LibWebP-NET,我们可以很容易的拥抱 WebP 这种未来的网络图片格式。希望 .NET 以后也可以内置对于 WebP 的支持,而不再需要第三方的类库。
利用 LibWebP-NET 解码与编码 WebP 格式图片的更多相关文章
- windows下查看webp格式图片
关于webp 时下webp格式日渐势起,主流浏览器(IE: ???)已经开始支持webp,诸多互联网企业(Facebook 和 ebay,国内的有淘宝.腾讯和美团等)都已经在不遗余力的将webp应用到 ...
- CentOS系统php5.6安装ImageMagick处理webp格式图片
1.先安装webp yum install libwebp 2.编译安装ImageMagick 之前有过yum安装的先卸载 yum remove ImageMagick 我使用的是老版本ImageMa ...
- SDWebImage支持WebP格式图片
SDWebImage本身就已经支持了webp格式的图片 1.下载libwebp https://github.com/webmproject/libwebp 然后你需要先安装好有homebrew或者m ...
- Glide终于解决了同时绑定多个webp格式图片的问题
前端时间,要给项目换个图片加载的库,使用Glide 3.7版本进行测试, 发现在快速滑动列表(每个item都会加载一个app的图标,采用webp格式,即同时加载多个webp格式)的时候,一屏至少有2- ...
- 织梦上传webp格式图片
织梦cms如何添加其他格式的图片呢? 这里以webp为类来实现一下如何让织梦支持webp 1.修改系统设置让织梦(dede)支持该图片格式,比如:webp(新图片格式) 系统->系统基本参数-& ...
- webp格式
有时候你右键保存了一张图片,然后好气啊,打不开.这要么是webp格式,要么,,,,要么有问题啊. WebP格式,谷歌大法开发的一种旨在加快图片加载速度的图片格式.图片压缩体积大约只有JPEG的2/3, ...
- 使用X264编码yuv格式的视频帧使用ffmpeg解码h264视频帧
前面一篇博客介绍在centos上搭建点击打开链接ffmpeg及x264开发环境.以下就来问个样例: 1.利用x264库将YUV格式视频文件编码为h264格式视频文件 2.利用ffmpeh库将h264格 ...
- 通读SDWebImage③--gif和webP的支持、不同格式图片的处理、方向处理
本文目录 NSData+ImageContentType: 根据NSData获取MIME UIImage+GIF UIImage+WebP UIImage+MultiFormat:根据NSData相应 ...
- [TFRecord格式数据]利用TFRecords存储与读取带标签的图片
利用TFRecords存储与读取带标签的图片 原创文章,转载请注明出处~ 觉得有用的话,欢迎一起讨论相互学习~Follow Me TFRecords其实是一种二进制文件,虽然它不如其他格式好理解,但是 ...
随机推荐
- Python之路(第一篇):Python简介和基础
一.开发简介 1.开发: 开发语言: 高级语言:python.JAVA.PHP.C#..ruby.Go-->字节码 低级语言: ...
- 把dataset对象转换成list集合方法
public static List<T> GetList<T>(DataTable table) where T:new() { List<T> list = n ...
- linux代码常用查询!!!!!!!!!!!!
字符串: echo "a b c d e f"|cut -d ' ' -f1 输出a echo "a b c d e f"|cut -d ...
- UVA 10821 Constructing BST
BST: binary search tree. 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...
- 用百度AI的OCR文字识别结合JAVA实现了图片的文字识别功能
第一步可定要获取百度的三个东西 要到百度AI网站(http://ai.baidu.com/)去注册 然后获得 -const APP_ID = '请填写你的appid'; -const API_KEY ...
- 2018.11.06 bzoj1912: [Apio2010]patrol 巡逻(树形dp)
传送门 一道挺妙的题啊. 对于K==1K==1K==1的直接求树的直径. 对于K==2K==2K==2的先求一次直径,然后考虑到如果两条边加进去形成的两个环重叠就会有负的贡献. 因此把之前那条直径上的 ...
- App测试基本流程详解(汇总整理)
前言 看过许多大神对APP测试的理解,博主总结了一下我们平时测试APP应该注意的一些测试点并结合大神的理解,总结出这篇文章. 一.测试周期 测试周期一般为两周,根据项目情况以及版本质量可适当缩短或延长 ...
- TCP/IP协议(7):应用层
应用层上协议有DNS.DHCP.HTTP.SSL/TLS.FTP.Telnet等. 1.DNS域名解析 DNS服务器用来解析域名从而获得对应IP地址,我们在对网络进行设置的时候如果DNS服务器没有设置 ...
- best-case analysis in real-time system
ECRTS: Exact Best-Case Response Time Analysis of Fixed Priority Scheduled Tasks motivation Real-time ...
- Android Studio自定义组合控件
在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件. 本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太小 ...