前言
本文的主要内容是在 Rocky Linux 9 下通过源代码编译安装 libwebp 库,以支持以后 Nginx 和 PHP 的 WebP 功能。
有个 现代的图片压缩格式叫做 WebP,它是由谷歌最先提出,并且完成的。
它比传统的图片压缩格式效率更高、压缩效果更好。并且, 支持透明和动画,以及提供有损和无损压缩的选项。
WebP 可结合 HTTP 服务器进行一定的配置就可对图片请求动态智能地返回 WebP 格式的响应。
有条件的情况下,我们都应应用它,代替旧的格式。
什么是 libwebp
libwebp 是一套集合 WebP 实用应用程序的库,安装了它可得到若干可对 WebP 图片格式进行操作的工具,如:
- libwebp:通过编程来对 WebP 格式的图片进行编码或解码。
- cwebp:WebP编码器。可对其他如PNG、JPEG等格式的图片转换为 WebP 格式。
- dwebp:WebP解码器。将 WebP 格式解码为PNG等格式,但不能解码动图。
- vwebp:WebP 文件查看器,但它在下文编译安装时不被包括在其中。
- webpmux:WebP 多路复用工具。
webpmux – 从非动画形式的 WebP 图片创建动画 WebP 文件,从动画 WebP 图片中提取帧,以及管理 XMP/EXIF 元数据和 ICC 配置文件。
-
gitf2webp:用于将 GIF 图片转换为 WebP 的工具。
以上参考:
https://developers.google.com/speed/webp/download?hl=zh-cn 。
https://developers.google.com/speed/webp/docs/webpmux?hl=zh-cn
安装前提
需要安装高版本的 libjpeg 库,以支持最新的 libwebp 和以后的 libgd。
至于 libjpeg-turbo 的安装,请参考:
Rocky Linux 9 源代码编译安装 libjpeg-turbo 。
安装依赖
dnf install -y gcc make wget autoconf automake libtool freetype-devel fontconfig\
libpng-devel libtiff-devel freetype-devel fontconfig-devel libpng libtiff
cd /tmp
# 这里有想要的 RPM 包: https://rpmfind.net/linux/rpm2html/search.php?query=giflib-devel
code=0
dnf install -y https://rpmfind.net/linux/centos-stream/9-stream/CRB/x86_64/os/Packages/giflib-devel-5.2.1-9.el9.x86_64.rpm
code=$?
while [ $code -gt 0 ]; do
dnf install -y https://rpmfind.net/linux/centos-stream/9-stream/CRB/x86_64/os/Packages/giflib-devel-5.2.1-9.el9.x86_64.rpm
code=$?
done
对安装好的依赖进行进一步的工作
if [ -f /usr/lib64/libgif.so.7 ]; then
ln -sf /usr/lib64/libgif.so.7 /usr/local/lib/libgif.so
ln -sf /usr/lib64/libgif.so.7 /usr/local/lib64/libgif.so
ln -sf /usr/lib64/libgif.so.7* /usr/local/lib64/
ln -sf /usr/lib64/libgif.so.7* /usr/local/lib/
fi
if [ -f /usr/lib64/libpng.so ]; then
ln -sf /usr/lib64/libpng* /usr/local/lib64/
ln -sf /usr/lib64/libpng* /usr/local/lib/
fi
从网络上获取源码
如果因为网络问题不能下载源码包,那么请参考本站的其他文章: 如何在境内加速 GitHub 资源的下载以及克隆。
cd /tmp
# 可在: https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html
# 找到你需要的版本。
LIBWEBP_VER=1.3.2
wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${LIBWEBP_VER}.tar.gz
code=0
while [ $code -gt 0 ]; do
wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${LIBWEBP_VER}.tar.gz
code=0
done
解压文件
tar zxf libwebp-${LIBWEBP_VER}.tar.gz
# 得到 libwebp-1.3.2 目录
# 重命名,以后有用
mv libwebp-${LIBWEBP_VER} libwebp
进行编译
/tmp
cd libwebp
./configure --enable-libwebpdecoder --enable-libwebpextras && make -j2 && make install
if [ -f "/usr/lib64/libwebp.so.7" ]; then
ln -sf /usr/lib64/libwebp.so.7 /usr/lib64/libwebp.so
fi
验证动态库版本
readelf -d /usr/lib64/libwebp.so
readelf -d /usr/lib64/libwebp.so.7
测试
# 将一张 JPEG 图片 test-origin.jpg 转换为 WebP 文件:
cwebp test-origin.jpg -o test.webp
转换好后把得到的 test.webp 文件下载到有桌面的电脑上查看是否已经转换成功。
用图形界面图像软件 ImageMagick 查看到此图片文件的格式是 WebP。
后记
本文通过从网络上获取最新源码在 Rocky Linux 9 操作系统下成功编译了 libwebp。
不仅如此,还以有序列表的形式介绍了 libwebp 的核心功能。
鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。
本文章可以转载,但是需要说明来源出处!
本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com