爲何轉?由於 JXR 格式在同等質量的狀況下,存儲空間比 JPEG 節約了 45-50%。 html
以前在《從 Windows 8 新功能推理某產品的八哥》提到過如今手機上的省流量 App,其原理就是壓縮圖片,但爲了提升效果,這個壓縮基本都是有損的,流量減小了,可是圖片質量降低了,有的降低能夠忍受,有的則使人髮指!好比,長微博,文字轉圖片,這種圖片線條分明,相鄰像素值對比可能很大(黑白分明),這類圖片採用高壓縮比的 JPEG 壓縮後,圖片質量每每不好。 算法
再舉個例子:QR 碼圖片,您能夠作一下試驗,爲了說明 JPEG 不適合存儲線條型圖片,哥採用一張蛋疼的 1290*1290 像素的 QR 碼圖片,保存爲 JPEG 大小是 4.76MB,但保存爲 PNG 格式時只有 52.4KB,請注意單位,前者是後者大小的將近 100 倍!! 學習
你們可能比較少關注 WP,也許您沒聽過 DataSense,簡單地說,它就是微軟作的節省流量的 App。號稱能夠節約 45% 的流量,這麼大的壓縮率,除了優化 HTML 相關的文本以外,對圖片的壓縮確定是必須的!雖然至今,UMU 也沒有親眼看過這個 App,但根據一些蛛絲馬跡,能夠推測 DataSense 可能使用了 JPEG XR 格式來轉化其餘格式的圖片。 優化
JPEG XR 雖然已經成爲一種標準,但目前依然只有微軟支持,因此,若是您想把這個技術應用到 iOS、Android 的節省流量 App 中,那很抱歉,此路不通(這也是 UMU 敢把此文發佈出來的緣由,咱們公司對有產品使用的技術都要求嚴格保密!) spa
根據實測,IE9@PC、IE10@PC、IE10@WP8 都是支持 JXR 格式的。下面是用 C++/CLI 寫的很簡單的一個格式轉化程序: 操作系統
using namespace System; using namespace System::IO; using namespace System::Windows::Media; using namespace System::Windows::Media::Imaging; bool ConvertToJxr(System::String^ source_name) { //try { Stream^ stream = gcnew FileStream(source_name, FileMode::Open, FileAccess::Read, FileShare::Read); BitmapDecoder^ jpeg_decoder = BitmapDecoder::Create(stream, BitmapCreateOptions::PreservePixelFormat, BitmapCacheOption::None); //JpegBitmapDecoder^ jpeg_decoder = gcnew JpegBitmapDecoder(gcnew Uri(source_name, UriKind::RelativeOrAbsolute), BitmapCreateOptions::PreservePixelFormat, BitmapCacheOption::None); //Console::WriteLine(L"Author: `{0}'", jpeg_decoder->Metadata->Title); FileStream^ jxr_file_stream = gcnew FileStream(source_name + L".jxr", FileMode::Create); WmpBitmapEncoder^ jxr_encoder = gcnew WmpBitmapEncoder; //BitmapMetadata^ metadata = gcnew BitmapMetadata(L"wmphoto"); for each (BitmapFrame ^ frame in jpeg_decoder->Frames) { jxr_encoder->Frames->Add(BitmapFrame::Create(frame, jpeg_decoder->Thumbnail, (BitmapMetadata^)frame->Metadata, jpeg_decoder->ColorContexts)); } //jxr_encoder->Metadata = metadata; jxr_encoder->Save(jxr_file_stream); //} catch (...) { // return false; //} return true; } int main(array<System::String ^> ^args) { for each (auto arg in args) { if (File::Exists(arg)) { if (ConvertToJxr(arg)) { Console::WriteLine(L"Converted: `{0}'", arg); } } else { Console::WriteLine(L"NOT Exists: `{0}'", arg); } } return 0; }
文末是一些搜索到的關於 JPEG XR 的資料,可供參考: .net
http://jpeg.org/newsrel26.html code
JPEG XR (ISO/IEC 29199-2) is now an International Standard and also an ITU-T Recommendation (T.832). orm
JPEG XR(舊稱 HD Photo 及 Windows Media Photo)是一種連續色調靜止圖像壓縮算法和文件格式,由Microsoft開發,屬於Windows Media家族的一部分。它支持有損數據壓縮以及無損數據壓縮,而且是微軟的XPS文檔的首選圖像格式。目前支持的軟件包括.NET Framework(3.0 or newer),Windows Vista/Windows 七、Internet Explorer 9,Flashplayer 11等。 htm
JPEG XR(微軟HD Photo格式)2009 年,成爲 ITU-T 推薦的國際標準(ISO/IEC 29199-2)。JPEG XR 的標準化確保數碼相機、打印機、顯示器和軟件公司可以在開發其新產品的時候兼容互通。其核心技術由微軟核心媒體開發團隊開發完成,針對當前和未來的數字圖像發展需求以提供了許多新的優點和特色。
在 Vista 操做系統中已經支持了這種新的文件格式,JPEG XR 相比其它技術更有優點,其中包括更好的壓縮技術,以一半的文件大小保存與 JPEG 相同質量的圖像,或以相同大小的文件保存質量至關於 JPEG 兩倍的圖像。JPEG 組織還對微軟開放與 JPEG XR 相關的專利的決策表示了讚賞,稱微軟免許可費政策將有助於JPEG推進 JPEG XR 普及,有助於確保它可以被更多的用戶所採用。JPEG 組織還鼓勵其它公司向微軟學習。