• 谷歌开源图片压缩算法Guetzli实测体验报告


    谷歌大神又出开源新技术啦,这次是对JPEG格式的图片采用全新算法重新编码,输出的图片还是JPEG但是图片大小明显缩小,而质量不但没有损失,甚至还更加优化,速速来体验一把。

    一、环境安装

    下载谷歌开源软件,编译安装以后实际上是一个bin工具。输入图片,输出jpeg格式图片。

    项目地址:https://github.com/google/guetzli

    文档下面有写Ubuntu、Arch Linux、windows、macOS的安装方式。我们以 Ubuntu 系统为例,介绍如何安装 guetzli。

    首先,克隆谷歌的项目文件:

    git clone https://github.com/google/guetzli.git
    

    然后,安装 libpng 软件包:

    sudo apt-get install libpng-dev
    cd guetzli
    

    然后直接 make ,生成bin文件,强大的开源工具 ./bin/Release/guetzli 于是就生成了。

    二、实战测试

    guetzli的使用比较简单,参数很少。默认采用95的质量,也可以通过 -quality 来指定大于等于84的质量,如果要小于84,需要修改源码。输入必须是符合转换要求的图片,输出则是jpeg格式图片。

    什么是符合要求的图片?

    官方说明:

    Only YUV color space input jpeg is supported

    实测发现,使用透明通道的png图、非YUV的jpeg比如黑白图、gif图都是不能转换的。

    guetzli效果如何?

    批量实测1292张图片。使用默认参数,也就是原图的95%质量。

    1185张转换成功,占比91.7%,其中3张png转换jpeg以后图片比原图更大,占比0.2%。107张无法转换,占比8.3%。

    原图平均大小33KB,guetzli压缩后23.4KB,平均压缩率29%,平均每张耗时7956毫秒。

    单张最大的图片3.76MB,guetzli压缩后2.55MB,压缩率31.5%,耗时976949毫秒(16分钟)。

    单张最小的图片757B,guetzli压缩后603B,压缩率20%,耗时65毫秒。

    另外借用国外媒体报道中使用的对比图片,直观地感受下压缩后的效果:

    左边是原图,中间是 libjpeg 压缩后,右边是使用 guetzli 压缩后。

    guetzli的资源消耗如何?

    官方文档说,1MPIX的图片处理需要消耗300M内存。

    实测一个1MB大小1920x2560的图片,有4.9MPIX。理论消耗内存1474MB,实际消耗1009MB内存,实际与理论基本相符。由此看出这个工具是个内存消耗大户,60G内存只够处理200MPIX,也就是同时处理40张左右的1920x2560图片。

    CPU消耗则一直是100%单核占用。当然实际使用多核机器可以同时跑多个进程。有多少核就能跑多少个guetzli任务。

    压缩图片耗时跟图片大小程离散相关,图片越大,耗时越久:

    测试环境使用的是8核16G内存的机器。单核平均处理23KB的图片需要约8秒钟,这个耗时比较长,注定无法进行在线实时压缩。

    三、优劣对比

    guetzli的优势在哪?

    实测对质量在90或以下的jpg图片,guetzli输出的新图质量不会降低。而实际压缩率能够达到平均压缩率29%。

    兼容性比较好,输出的jpeg格式图片通用性非常高。没有webp、sharpp那种协议不兼容的困扰。

    在客户端jpeg格式的图片编解码速度比其他私有协议快很多。

    guetzli有哪些劣势?

    guetzli处理类型局限性,并不能应对全部类型的图片。只能处理YUV颜色编码的图片。

    时效性较差,图片越大处理越慢。1MB的图片处理需要291秒,本次测试平均23KB的图片需要8秒。

    相关推荐

    1.图片流量节省大杀器:基于CDN的sharpP自适应图片技术实践

    2.关于Android图片资源瘦身的奇思妙想

    3.Laravel 整合万向优图图片管理能力,打造高效图片处理服务


    此文已由作者授权腾讯云技术社区发布,转载请注明文章出处,获取更多云计算技术干货,可请前往腾讯云技术社区

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~

  • 相关阅读:
    设置iterm可配色
    Java权限管理
    npm添加淘宝镜像
    新版同义词
    maven打包加时间戳方法总结
    python中的实例方法、类方法、静态方法的区别
    15个流行的python框架
    python学习笔记
    前置声明和包含头文件的区别(待补充)
    数组和链表的时间复杂度
  • 原文地址:https://www.cnblogs.com/qcloud1001/p/6595336.html
Copyright © 2020-2023  润新知