使用 Rust 实现 WebP图片格式的转换

什么是 WebP

    WebP图像格式是一种由 Google 开发的现代图像格式,最初在2010年发布,它的首要优势在于其出色的压缩能力。这意味着它可以在保持图像质量的同时,显著减小文件大小,这对于网页加载速度的提升至关重要,使用户能够更快地获取所需信息。根据互联网公开资料表明 ,在同等图片质量情况下,优化后的WebP格式可比原PNG 格式体积缩小了 20%-40%左右,如果一个网站首页包含近百张图片的话, 采用 WebP格式后,在进一步提升用户浏览体验的同时,还可以节约可观的网络带宽资源,因此做为网站效能提升的手段之一,WebP 图片格式已经成为了一种备受关注的选择。

WebP 兼容性表现

    从上图可以看出,除 IE 早期版本外,目前主流版本浏览器均已经实现对 WebP格式的支持,尤其是在移动端的应用, 受限于带宽和上网环境, 相对于传统图片格式,WebP可以一定程度的提升移动端的浏览体验

Rust 实现 WebP格式转换

现在网上已经有大量的图片转 WebP 格式的在线服务工具,但都无法实现可控的本地化转换,尤其是与用户自身业务系统进行更紧密的绑定,因此在 Rust 日常开发过程中, 如何将各种图片格式可以快速的转换为 WebP 格式,并融合到现有内容编辑及生产流程里,也是一个开发者比较关注的问题,下面我们以 JPG 文件为例,示意一下如何实现到 WebP 格式的转换:

use std::io::{Read, Write};
use std::path::Path;
use image::io::Reader as ImageReader;
use webp::Encoder;

fn new_convert<P:AsRef<Path>>(j:P,w:P) -> Result<(),std::io::Error> {

    let image = ImageReader::open(j)?.decode().expect("decode error");
    let i_width = image.width();
    let i_height = image.height();

    let webp = Encoder::new(image.as_bytes(), webp::PixelLayout::Rgb, i_width, i_height);
    let buf = webp.encode(70.0);

    let mut f = std::fs::File::create_new(w)?;
    f.write_all(&buf)?;

    println!("convert success!");

    Ok(())
}

fn main() {
    let jpg_path = "/Users/guest/test/u001.jpg";
    let webp_path = "/Users/guest/test/u001.webp";
    new_convert(jpg_path, webp_path);
}

 上述代码将 一张大小为3.3M的jpg图片直接压缩至 831 KB,在肉眼基本区别不出明显差别的情况下,体现出 WebP 格式带来的数据缩减优势

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值