IJG的全稱是Independent JPEG Group(獨(dú)立JPEG小組),該組織以C語(yǔ)言源代碼的形式提供應(yīng)用廣泛、完全免費(fèi)的JPEG解碼/編碼函數(shù)庫(kù),編譯后生成二進(jìn)制格式的LIB文件,可以連接到其他編譯型語(yǔ)言的程序中。其實(shí)對(duì)于Windows程序員來(lái)說(shuō),這個(gè)函數(shù)庫(kù)最難的地方就是對(duì)編譯選項(xiàng)的設(shè)置(Unix無(wú)此問(wèn)題),一旦設(shè)置完成,編譯成功,差不多就可以賣錢了。有些開發(fā)商就是將對(duì)IJG的調(diào)用封裝一下,生成DLL或OCX,就開始堂而皇之地收費(fèi)。由于IJG生成的代碼簡(jiǎn)潔干凈,無(wú)需任何DLL或OCX,很多收費(fèi)的圖像瀏覽器、編輯器等也直接或間接地基于IJG。另外在IJG的源代碼中還包含對(duì)GIF、BMP、PPM、TGA、RLE文件解碼/編碼的實(shí)例代碼,因此也有人說(shuō)IJG提供的JPEG庫(kù)支持這些圖像格式,其實(shí)這些代碼僅供IJG測(cè)試用,一般生成的LIB文件中并不包括這部分代碼,如果想支持這些格式還需要在此源碼基礎(chǔ)上花功夫。
IJG最大的好處是穩(wěn)定、兼容性強(qiáng),畢竟經(jīng)受了多年的考驗(yàn)。缺點(diǎn)是速度太慢,碰到大文件會(huì)很難受。
IJL的全稱是Intel® JPEG Library,是由Intel公司提供的JEPG解碼/編碼庫(kù),專門針對(duì)Intel處理器進(jìn)行了徹底的優(yōu)化,因此在Win-tel環(huán)境下速度一流。這個(gè)工具最大的特點(diǎn)就是簡(jiǎn)單,一共只有六個(gè)函數(shù)(ijlInit、ijlFree、ijlRead、ijlWrite、ijlGetLibVersion、ijlErrorStr),而且隨機(jī)文檔中附有完整的VC++實(shí)例,因此對(duì)于VC程序員來(lái)說(shuō)不用費(fèi)什么腦子就可以對(duì)JPEG應(yīng)用自如。
IJL有兩個(gè)主要的版本:1.5版和2.0版。1.5版是最后一個(gè)免費(fèi)版本的IJL,以后的版本都是收費(fèi)版。而2.0則是IJL的最后一個(gè)版本,以后IJL被Intel ® Integrated Performance Primitives (IPP)v6.1中新推出的UIC(Unified Image Codec)所取代。
免費(fèi)的IJL v1.5流傳很廣,但存在下列問(wèn)題:
內(nèi)存漏洞。這個(gè)用IJL的DLL版看不出,要用Static Lib版才能看出來(lái):每打開一個(gè)文件,VC會(huì)報(bào)告72字節(jié)(3通道JPG)或24字節(jié)(單通道JPG)的漏洞。網(wǎng)上有文章說(shuō)明如何用內(nèi)聯(lián)匯編解決這個(gè)問(wèn)題。
不支持EXIF中指定的旋轉(zhuǎn)參數(shù)。這個(gè)問(wèn)題不大,可以在解碼后自己旋轉(zhuǎn),但需要自己再去解碼EXIF。
手冊(cè)上說(shuō)不支持CMYK色彩空間,但自帶的JPGView例子支持部分CMYK的解碼,另外一些解碼后色彩不正確。這個(gè)也可以修正,同樣需要自己解碼。
容錯(cuò)性太差。某些數(shù)據(jù)異常的文件用IJG能解碼,用IJL則不行。有源代碼的話很容易修正,沒(méi)有源代碼就難了。
IJL v2.0從其他途徑可以搞到,包括部分源代碼。但是從我試用的情況看,除修正了內(nèi)存漏洞外,其他問(wèn)題依舊存在。不過(guò)畢竟有一些源代碼,所以可以自己動(dòng)手修正。另外雖然IJL v2.0的編譯環(huán)境要求是VC++ 2002以上,自己建個(gè)project在VC6下編譯也沒(méi)有問(wèn)題,花幾分鐘修正一下就好。
從速度上來(lái)說(shuō),在目前的主流CPU上IJL v2.0要比v1.5快,畢竟可以采用最新的處理器指令。因此從v2.53開始,本軟件不再采用IJG,改用IJL v2.0。
在IPP的sample中,也給出了用IPP改造后的IJG版本,速度比原版IJG要快,但還是沒(méi)有IJL快。