圖片來源: 

臉書

臉書最近正式宣布開源釋出跨平臺影像轉碼函式庫Spectrum現在已經在GitHub平臺上提供Spectrum 1.0.0版本,隨著智慧型手機相機硬體的快速進展,手機儲存越來越多檔案,這些龐大的資料檔案會占據手機的儲存空間,存取資料的速度也會變得相當緩慢,為了讓傳送圖片的過程變得更有效率,臉書為Android和iOS系統,開發了影像轉碼函式庫Spectrum,讓行動裝置的開發人員處理影像的工作,變得更簡單、有效率。

第一步驟是在影像上傳之前,透過轉換編碼格式來降低檔案大小,雖然聽起來簡單,但是需要深入了解不同的影像處理步驟和影像格式,才能在不影響影像品質的情況下,降低檔案的大小,利用平臺提供的影像處理API,是一種解法,不過,多種行動平臺和API,可能會產生多種不同輸出結果,為了能夠符合各種平臺開發隱藏的細節和參數,臉書認為應該要能夠優化輸出結果。

現代的智慧型手機能夠拍下高畫質的影像,也因此,影像的檔案通常很大,傳送完整解析度的照片通常是浪費,因為內容傳遞網路(content delivery network)也會為接收照片端重新調整大小,若能在傳送端就先調整圖像大小,就能減少傳送照片的頻寬,而挑戰在於如何維持影像解析度,又能降低圖像大小。

在一般的影像處理任務中,像是直譯可交換圖像文件格式(EXIF)原資料,可能會導致重複性程式碼,讓維護和全面性改善工作變得窒礙難行,而若使用最新的壓縮函式庫,像是MozJpeg,則需要撰寫C語言或是C++語言,臉書想要打造的是,不需要寫客製化或是難以維護的解決方案,讓開發人員在維護影像品質的同時,能夠簡單地傳送一個較小的檔案。

影像轉碼函式庫Spectrum的API,能夠使開發人員聚焦於輸出結果的屬性,而不是每一個獨立的步驟,且Spectrum能夠選出實現轉碼請求的最佳方法,舉例來說,若是可行,Spectrum會為選擇裁切或是旋轉JPEG影像,來完成影像失真率最低的操作,另外,Spectrum也會透過優化解碼樣本和完美像素(pixel-perfect)相互關係,來改變檔案大小。

Spectrum針對不同的影像,提供影像轉碼的最佳配方(Recipes),協助開發人員,針對每個獨立的請求,選擇最佳的執行影像轉碼的方法步驟,Spectrum收到每個請求時,會反覆執行配方的清單,迭代直到找到第一個最佳、最有效率且影像失真率最低的配方,也有可以處理任何轉碼請求的通用的配方,除此之外,臉書也將一些原本的壓縮函式庫整合至Spectrum,像是MozJpeg、Libpng和Libwebp,提升Spectrum對一般平臺API編碼參數的控制,這些套件能夠為影像格式和額外的配方提供協助。

影像轉碼函式庫Spectrum的核心是用C++語言所撰寫,讓Spectrum能夠在Android和iOS系統的App中共享,使得輸出的結果更加一致,為了使開發更容易,臉書也提供支援Java和Objective-C的API,除此之外,用C++寫的核心也讓Spectrum的配置更容易掌控,面對計算密集度較高的操作,也能展現較高的執行速度。

臉書期望藉由開源釋出影像轉碼函式庫Spectrum,能夠幫助開發人員創造出提供更好使用體驗的影像產品,在臉書自家的App中,Spectrum函式庫改善了影像傳輸的品質和可靠性。


Advertisement

更多 iThome相關內容