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