CentOs7 中安裝 guetzli
教程台盯,我的承諾,今天兌現(xiàn)。帶你上車
周六的時(shí)候收到 36kr 推送的一篇文章: Google開源新算法脖母,可將JPEG文件縮小35%
測(cè)試了結(jié)果瑟曲,驚的我目瞪口呆饮戳。如果非要我用一個(gè)詞形容的話:
牛逼
太牛逼
先來教大家如何在 CentOs7 中安裝,項(xiàng)目的說明文檔沒有很好的說明如何完成 redhat 系列的 linux 如何安裝洞拨。我是踩了不少坑才完成的扯罐。
這里邊最簡(jiǎn)單的安裝就是 mac 上了,直接通過 brew install guetzli
就ok烦衣。ubuntu 上的安裝也是滿多坑歹河,如果出了問題掩浙,也可以借鑒本文。
首先為自己的系統(tǒng)設(shè)置epel源
# rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
上面這一步并不是必須的秸歧。我只是為了講解后面的錯(cuò)誤厨姚。
在安裝 Guetzli 之前,需要先安裝:
libpng的安裝
先說 libpng
的安裝键菱。該庫是一款C語言編寫的比較底層的讀寫PNG文件的跨平臺(tái)的庫谬墙。
如果搞不懂c語言,你也不用管他经备,簡(jiǎn)單說就是 guetzli
內(nèi)部會(huì)使用它拭抬,所以需要先把它安裝好。否則 guetzli
沒辦法讀取png圖片(并且也不能編譯通過)
這個(gè)庫可以直接通過yum來進(jìn)行安裝侵蒙。安裝出來的是 1.5.13
造虎。當(dāng)前最新的版本是 1.6.29
由于我的源里邊沒有最新版,所以這里安裝的版本就是:1.5.13
安裝命令:
yum install libpng-devel
這里一定注意纷闺,不要直接安裝 libpng 累奈。安裝 libpng-devel 會(huì)依賴安裝 libpng
ps: libpng-devel
是 用于程序操作PNG圖片的開發(fā)工具
The libpng-devel package contains header files and documentation necessary
for developing programs using the PNG (Portable Network Graphics) library.
If you want to develop programs which will manipulate PNG image format
files, you should install libpng-devel. You'll also need to install
the libpng package.
如果沒有安裝依賴成功,請(qǐng)自行手動(dòng)安裝急但。命令
yum install libpng
檢查是否安裝成功:
yum info libpng libpng-devel
看到如下內(nèi)容
已安裝的軟件包
名稱 :libpng
架構(gòu) :x86_64
時(shí)期 :2
版本 :1.5.13
發(fā)布 :7.el7_2
大小 :602 k
源 :installed
來自源:base
簡(jiǎn)介 : A library of functions for manipulating PNG image format files
網(wǎng)址 :http://www.libpng.org/pub/png/
協(xié)議 : zlib
名稱 :libpng-devel
架構(gòu) :x86_64
時(shí)期 :2
版本 :1.5.13
發(fā)布 :7.el7_2
大小 :211 k
源 :installed
來自源:base
簡(jiǎn)介 : Development tools for programs to manipulate PNG image format files
網(wǎng)址 :http://www.libpng.org/pub/png/
協(xié)議 : zlib
通過 yum info
命令查看已安裝的軟件選項(xiàng)澎媒。如果看到上面的結(jié)果說明安裝成功。
gflags的錯(cuò)誤安裝
為了把他安裝好波桩,搞得我神魂顛倒戒努,忘乎所以。真的是太多坑镐躲。最后通過 issue 得到了自己想要的答案储玫。下面將給大家重現(xiàn)一下我的錯(cuò)誤過程。
記得文章開頭讓大家設(shè)置的 epel
源嗎萤皂?我用 yum search gflags
找到如下信息
[root@play ~]# yum search gflags
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.nethub.com.hk
* epel: ftp.jaist.ac.jp
* extras: mirrors.btte.net
* updates: mirror.lzu.edu.cn
======================================================= N/S matched: gflags =======================================================
gflags-devel.x86_64 : Development files for gflags
gflags.x86_64 : Library for commandline flag processing
因此撒穷,直接使用 yum install gflags gflags-devel
然后去編譯 Guetzli
,出現(xiàn)下面的錯(cuò)誤信息:
==== Building guetzli (release) ====
guetzli.cc <命令行>:0:18: 錯(cuò)誤:‘google’不是一個(gè)命名空間名 guetzli/guetzli.cc:33:17: 附注:in expansion of macro ‘GFLAGS_NAMESPACE’ using namespace GFLAGS_NAMESPACE;
^ guetzli/guetzli.cc:33:33: 錯(cuò)誤:expected namespace-name before ‘;’ token using namespace GFLAGS_NAMESPACE;
^ guetzli/guetzli.cc: 在函數(shù)‘int main(int, char**)’中: guetzli/guetzli.cc:194:55: 錯(cuò)誤:‘SetUsageMessage’在此作用域中尚未聲明 "guetzli [flags] input_filename output_filename");
^ guetzli/guetzli.cc:194:55: 附注:建議的替代: In file included from guetzli/guetzli.cc:24:0: /usr/include/gflags/gflags.h:331:29: 附注: ‘gflags::SetUsageMessage’ extern GFLAGS_DLL_DECL void SetUsageMessage(const std::string& usage);
^ guetzli/guetzli.cc:195:43: 錯(cuò)誤:‘ParseCommandLineFlags’在此作用域中尚未聲明 ParseCommandLineFlags(&argc, &argv, true);
^ guetzli/guetzli.cc:195:43: 附注:建議的替代: In file included from guetzli/guetzli.cc:24:0: /usr/include/gflags/gflags.h:346:31: 附注: ‘gflags::ParseCommandLineFlags’ extern GFLAGS_DLL_DECL uint32 ParseCommandLineFlags(int argc, char** argv, bool remove_flags);
^ guetzli/guetzli.cc:198:31: 錯(cuò)誤:‘ShowUsageWithFlags’在此作用域中尚未聲明 ShowUsageWithFlags(argv[0]);
^ guetzli/guetzli.cc:198:31: 附注:建議的替代: In file included from guetzli/guetzli.cc:24:0: /usr/include/gflags/gflags.h:175:29: 附注: ‘gflags::ShowUsageWithFlags’ extern GFLAGS_DLL_DECL void ShowUsageWithFlags(const char *argv0);
// what --help does
^ make[1]: *** [obj/Release/guetzli.o] 錯(cuò)誤 1
make: *** [guetzli] 錯(cuò)誤 2
錯(cuò)誤中出現(xiàn)了多處 xx在此作用域中尚未聲明 對(duì)應(yīng)的 c++ 文件剛好是:gflags.h
因此我猜測(cè)裆熙,可能是版本不對(duì)端礼。通過 yum info gflags
確認(rèn)一下當(dāng)前的版本信息
名稱 :gflags
架構(gòu) :x86_64
版本 :2.1.1
發(fā)布 :6.el7
大小 :72 k
源 :epel/x86_64
簡(jiǎn)介 : Library for commandline flag processing
網(wǎng)址 :http://code.google.com/p/gflags
協(xié)議 : BSD
是2.1版本。因?yàn)槲襪ac上的 Guetzli
是可以運(yùn)行的入录,因此查看一下mac上的 gflags
版本蛤奥,得到如下:
gflags: stable 2.2.0 (bottled)
Library for processing command-line flags
ok,兩者之間差了一個(gè)小版本僚稿。在 gflags github 查看發(fā)布的 release 版本凡桥。看到了最新的 2.2.0 版本蚀同。然后看到其對(duì)應(yīng)的描述:
This release adds support for use of the gflags library as external dependency not only in projects using CMake, but also Bazel, or pkg-config.
我想缅刽,不管怎么樣啊掏,先試試唄。
正確安裝 gflags 新版本
由于 epel 還沒有最新的源衰猛,只能自己動(dòng)手編譯了脖律。官方編譯指南
ps: Debian/Ubuntu Linux 可以直接使用 apt-get 來安裝,但是好像有些版本也會(huì)出現(xiàn)版本問題腕侄,也可以動(dòng)手自己編譯最新的版本
由于 gflags
需要 ccmake
編譯小泉。所以需要先安裝 cmake (安裝 cmake 后,就可以使用 ccmake
)
yum -y install cmake
好冕杠,搞定 cmake
微姊,接下來開始 gflags
。
[root@play ~]# wget https://github.com/gflags/gflags/archive/v2.2.0.tar.gz
[root@play ~]# tar -zxvf v2.2.0.tar.gz
[root@play ~]# cd gflags
[root@play ~]# mkdir build && cd build
[root@play ~]# ccmake ..
這時(shí)會(huì)有一個(gè)界面分预,用來生成 configuration files兢交,這里需要特別說明一下,建議大家進(jìn)入界面后笼痹,一直按c
配喳,選項(xiàng)不明白的都不要設(shè)置,知道出現(xiàn)一個(gè)g
的時(shí)候凳干,請(qǐng) press g晴裹,截個(gè)圖
接著來
[root@play ~]# make
[root@play ~]# make install
ok,現(xiàn)在安裝好了gflags救赐,如果編譯過程中還有其他錯(cuò)誤涧团,應(yīng)該是少了一些支持的 lib,根據(jù)錯(cuò)誤去查一查经磅。
Guetzli安裝
前面都是為了安裝它而做的準(zhǔn)備工作泌绣,接下來就來完成它的編譯,so easy
[root@play ~]# git clone https://github.com/google/guetzli.git
[root@play ~]# make
然后會(huì)在目錄中生成一個(gè)文件
guetzli/bin/Release/guetzli
將命令移動(dòng)到自己的命令環(huán)境中预厌,就可以使用了阿迈。
[root@play ~]# guetzli
guetzli: Guetzli JPEG compressor. Usage:
guetzli [flags] input_filename output_filename
xxxxxx
Flags from guetzli/guetzli.cc:
-quality (Visual quality to aim for, expressed as a JPEG quality value.)
type: double default: 95
-verbose (Print a verbose trace of all attempts to standard output.)
type: bool default: false
然后大家可是試一試壓縮效果。后續(xù)會(huì)有文章介紹它的壓縮效果轧叽,以及php中使用它苗沧。請(qǐng)持續(xù)關(guān)注。
我要吐槽
當(dāng)我費(fèi)勁心思解決這個(gè)問題后犹芹,作者 robryk
在issue 中告訴我崎页,最新的代碼已經(jīng)把 gflags 依賴給移除了鞠绰。因?yàn)槌霈F(xiàn)相關(guān)問題的人太多了腰埂。詳情