Dropbox 的无损 JPEG 压缩工具 Lepton 可以释放多少可用空间?

大家好,
我是Mandai,Wild团队负责开发工作的成员。

我使用 Dropbox 开发的 JPEG 文件无损压缩工具 lepton 进行了各种尝试,看看图像大小究竟可以压缩多少。


本示例中使用的操作系统是 CentOS 7,它是在 VirtualBox 虚拟机中创建的。
请参见以下屏幕截图,了解 Windows 系统信息和 VirtualBox 分配情况。

2016-10-13_11h57_48

2016-10-13_11h55_53

2016-10-13_11h55_59

如果您想在相同的环境下轻松进行尝试,本文构建虚拟环境。

由于它对编译环境要求较高,因此很可能无法在 CentOS 6 或更早版本上正确编译,请注意这一点。
(事实上,我尝试了各种方法,但都无法在 CentOS 6.7 虚拟机上编译。)

 

安装轻子

安装轻子非常容易。

如 GitHub 所述,运行自带的 autogen.sh 脚本下载构建所需的依赖模块,然后使用 autoreconf 设置构建环境。
如果 autogen.sh 运行失败,请尝试使用 yum 安装 automake 和 autoconf。

git clone https://github.com/dropbox/lepton.git sh autogen.sh ./configure make -j4 sudo make install

 
在多核处理器上运行 `make` 命令速度明显更快,因此运行 `make` 命令时应使用 `-j` 选项。
上面的命令显示了在配备 4 核 CPU 的 PC 上运行 `make` 命令的结果。

可以使用 nproc 命令获取 CPU 核心数,因此可以执行类似“make -j$(nproc)”这样的操作(真是不可思议!)。

 

可以实现多少减排?

现在到了期待已久的转换时间了。

我们这道菜吧先来做

文件大小为 5,816,548 字节,略大于 5 MB。对于 JPEG 图像来说,我认为这相当大了。

将其转换为轻子格式的命令如下:

时间 lepton IMGP2319.JPG compressed.lep lepton v1.0-1.2.1-35-ge230990 解压缩此文件需要 14816784 字节 4349164 5816548 74.77% 解压缩此文件需要 15946404 字节 4349164 5816548 74.77% 实际耗时 0 分 1.102 秒 用户耗时 0 分 2.676 秒 系统耗时 0 分 0.053 秒

 
添加 `time` 命令只是为了获取执行时间;实际上,`lepton IMGP2319.JPG compressed.lep` 就足够了。
结果显示,文件被压缩到原大小的 74.77%。

ls 命令的输出如下:

ls -al -rw-rw-r--. 1 vagrant vagrant 5816548 10月 11 09:33 IMGP2319.JPG -rw-------. 1 vagrant vagrant 4349164 10月 11 09:49 compressed.lep

 
我认为这件事总体上处理得很顺利。

现在,让我们把它恢复到最初的样子。

时间 lepton compressed.lep decompressed.jpg lepton v1.0-1.2.1-35-ge230990 解压缩此文件需要 15946404 字节 4349164 5816548 74.77% 实际耗时 0 分 0.370 秒 用户耗时 0 分 1.235 秒 系统耗时 0 分 0.022 秒 ls -al -rw-rw-r--. 1 vagrant vagrant 5816548 10 月 11 日 09:33 IMGP2319.JPG -rw-------. 1 vagrant vagrant 4349164 10 月 11 日 09:52 compressed.lep -rw-------. 1 vagrant vagrant 5816548 10 月 11 日 09:54 decompressed.jpg

 
原始图像为 IMGP2319.JPG,将其转换为 lepton 格式后,再将其转换为 jpeg 格式,结果为“decompressed.jpg”。

文件大小相同,即使运行 diff 比较,结果也显示是同一个文件。

但是请注意,权限已发生变更。

 

转换大量图像(jpeg → lep 格式)

我们转换了大量图像,以研究平均可以减少多少文件大小。

首先,将 jpeg 格式转换为 lep 格式。

Lepton 处理了 159 个文件,总大小为 807MB。Lepton
转换这些文件总共用时 569.686 秒,平均用时 3.582931 秒。

JPEG 文件的总大小为 826,028 字节,转换为 LEP 格式后大小为 627,912 字节。
平均压缩率为 23.98%,与宣传的 22% 基本一致。
压缩率最高的文件达到了 29.58%,
而压缩率最低的文件为 21.23%。
中位数为 23.82%,因此可以肯定地说,平均压缩率超过了 22%(对吧?)。

顺便说一下,CPU负载似乎分布在每个核心上,所以没有出现只有一个CPU被高度利用的情况。

 

转换大量图像(lep 格式 → jpeg)

接下来,尝试将 lep 格式转换为 jpeg 格式。

我们来尝试将刚刚转换的 LEP 格式文件转换回 JPEG 格式。
此次转换总共耗时 232.158 秒,平均耗时 1.460113 秒。

执行时间也因文件而异,有些文件最长耗时 1.992 秒,有些文件
最短耗时 1.246 秒。
执行时间的中位数为 1.436 秒。

 

结论

对于需要保存大量 JPEG 图片的服务,在将其保存到 AWS S3 或类似服务之前进行转换可以节省资源。
然而,压缩和解压缩所需的处理能力相当可观。
所需时间很大程度上取决于 CPU 性能和内存使用情况,因此您需要根据自己的机器进行调整。
内存使用情况、进程和线程数都可以通过设置选项进行控制。

不过,一个值得注意的特点是,它似乎还可以通过 Unix 域套接字或指定监听端口来检索文件。它甚至可能
旨在与独立的 Lepton 转换服务器配合使用,以便持续执行转换。根据您的使用场景,它可能会大放异彩。

Dropbox 内部已经在使用 Lepton,而且似乎效果不错。
如果您正苦恼于 JPEG 图片的文件大小,不妨试试 Lepton 吧?

 
就这样。

Dropbox 和 Dropbox 标志是 Dropbox, Inc. 的商标。
如果您觉得这篇文章对您有帮助,请点个“赞”!
1
加载中...
1票,平均分:1.00/11
1,071
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

万代洋一

我的主要工作是开发社交游戏的Web API,但幸运的是,我也有机会参与其他各种任务,包括市场营销。
我在Beyond中的图像版权采用CC0协议。