guetzli图片压缩php扩展

前言:在github的发现一个谷歌开源的jpeg格式图片的压缩工具,它可以在主观质量无损的条件下, 将jpeg图片减少20%~30%的码率,于是当时测试了一下压缩效果,图片质量95压缩率大概在20%~30%。我们司平台是漫画阅读app,整个app除了图片还是图片,特别是首页,用了大量的高清无码的图片,于是我想将guetzli用于首页漫画封面图片的压缩,但是guetzli并没有提供php的接口,所以当时的实现是将需要压缩的图片放入redis队列,创建一个进程在凌晨基本没有用户访问的时候通过exec调用guetzli工具对redis队列消费处理。(至于为什么要这样,请看下面网上大佬的测试报告)


以下数据引用自这篇博客谷歌开源图片压缩算法Guetzli实测体验报告

Guetzli资源消耗:

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

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

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

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

guetzli劣势:

由于guetzli时效性差,图片越大压缩时间越长,而且资源占用大,简直就是内存消耗大户。

guetzli优势:

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

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

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


下面说说我们将要做的:

从github下载guetzli的源码编译后会生成一个guetzli的工具,以及一个静态库文件,我们需要做的就是创建一个php扩展调用这个静态库提供的压缩功能。

动态加载so模块:利用ext_skel工具编译生成so模块,修改php.ini文件,动态加载即可
静态编译:将编写的模块静态编译到PHP,需要重新编译PHP

面临的问题:

注:php扩展加载方式可以分为静态编译与动态加载。(区别在于,静态编译需要重新编译php才能使用扩展,动态加载是将php扩展编译成so动态库库,修改php.ini,php在运行时会动态加载,不需要重新编译php),我们这里需要将扩展编译成so动态库。

</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值