webp批量转换jpg_新一代图像格式——WebP

最近开始写公众号,本地写 Markdown 图片都是用相对路径,复制粘贴到微信公众号编辑器就跪了,手动上传图片的过程中想到了 WebP,就思考是不是可以尝试把图片后缀都统一成 WebP呢?当然现实是公众号不支持上传 WebP 后缀的图片,即使公众号后台会把你上传的 PNG/JPEG 转成 WebP ? 。

1. 了解 WebP

WebP 是 Google 研发的具有先进有损无损压缩算法的图片格式,主要的特点有:高压缩率、支持透明通道、支持动图。据 WebP 官网的描述,在图片质量等同的条件下,WebP 无损压缩后的图片文件大小比对应的 PNG 图片小 26%,有损压缩图片比对应 JPEG 图片小 25~34%。

ad540ef1084323c8d30f3ad3da7cf485.png

4282ef078fcc535215ef0f19f866bf60.png

Lenna PNG 格式 VS WebP 格式

目前主流浏览器,如 Google Chrome、FireFox、Edge 以及 Opera (macOS Big Sur Safari 实测支持 WebP)等,都原生支持 WebP 了。虽然 WebP 是面向 Web 的解决方案,但是凭借其优秀的压缩比,其它平台、专业工具也逐渐加入了支持 WebP 的队伍。

2. 使用 WebP

虽然主流浏览器原生支持 WebP,但 macOS 直到 Big Sur 才原生支持预览 WebP 图片,所以想要查看 WebP 图片,可能还需要额外安装一些软件才行(VSCode 支持查看 WebP)。

WebP 包含了一套轻量的编解码库 libwebp,同时提供了开箱即用的命令行工具:

  • cwebp,将其它图片格式转成 WebP,不支持 Gif;
  • dwebp,将 WebP 格式转成其它图片格式;
  • vwebp,预览 WebP 图片,作用不是很大;
  • gif2webp,将 Gif 图转成 WebP 格式;
  • webpmux,将静态 WebP 图片组合成动态 WebP 图片,或从动态 WebP 中抽帧。

这些工具的使用可以看官网文档或者doc,这里不赘述。

2.1. 安装

借助这些工具就能完成 WebP 与其它格式之间的相互转换(程序员表示好评),macOS 可以通过 brew install webp 安装,但是 brew 默认的安装脚本禁用了 gif2webp,所以需要修改安装脚本:

# 执行 brew edit webp 打开 webp 的安装脚本

class Webp def install
      system "./autogen.sh" if build.head?
      system "./configure", "--prefix=#{prefix}","--disable-dependency-tracking","--disable-gl",# 删除下面一行"--disable-gif","--enable-libwebpdecoder","--enable-libwebpdemux","--enable-libwebpmux"
      system "make", "install"endend

修改好脚本后重新安装:

brew reinstall webp

2.2. 批量转换

这些工具怎么使用可以看 man doc,描述得很清楚了。

为了方便批量转换,定义一个shell函数,指定后缀批量(递归)转换当前目录下的图片:

function webp_cvr() {
    local suffix=${1}
    if [ -z ${suffix} ]; then
        echo "Invlaid suffix: ${suffix}"
        return 1
    fi

    local lower_suffix=$(echo "${suffix}" | awk '{print tolower($0)}')
    for img in $(find ./ -iname "*.${suffix}"); do
        if [ ${lower_suffix} = "gif" ]; then
            gif2webp -v -q 100 ${img} -o ${img%.*}.webp
        elif [ ${lower_suffix} = "png" ] || [ ${lower_suffix} = "jpg" ] || [ ${lower_suffix} = "jpeg" ]; then
            cwebp -v -progress -q 100 ${img} -o ${img%.*}.webp
        else
            echo "${img} not supported"
        fi
    done

}

3. References

[1] WebP: https://developers.google.com/speed/webp/

[2] WebP Wikipedia: https://en.wikipedia.org/wiki/WebP

[3] 探究WebP一些事儿: https://aotu.io/notes/2016/06/23/explore-something-of-webp/index.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值