是否可以將 JPEG 轉換為無損格式並在不損失品質的情況下將其轉換回來?

是否可以將 JPEG 轉換為無損格式並在不損失品質的情況下將其轉換回來?

假設我有一個先前以JPEG 格式壓縮的圖像的無損版本(例如,如果您在mspaint 中打開JPEG 圖像並將其另存為BMP,我知道在此過程中會丟失一些元數據,但這不是我關心的)

我想知道是否可能以及如何將其轉換回 JPEG 格式而不損失影像質量,這意味著每個像素都完全相同?

編輯:我完全理解將 JPEG 影像轉換為無損格式不會為我帶來任何額外的品質。我問這個是因為:我有一個從 SWF 檔案中提取的 PNG 檔案。最初(在 SWF 檔案中)物件是 JPEG 圖像 + alpha 通道,其檔案大小比我擁有的 PNG 檔案小得多。我想要原始格式(JPEG + Alpha 通道),但我不再有原始 SWF 文件的任何副本(而且我也未能在網上找到一份副本),因此我無法重做提取過程。

答案1

本質上,您要問的是 JPEG 影像的解碼過程是否可以逆轉。這與傳統 JPEG 編碼器的意圖非常不同,並且我不知道有任何軟體可以實現這一點。從數學上講,這是可能的*,只要圖像在編碼後沒有應用變換或其他修改,但從編程上講,這有多困難?

第一個問題是顏色空間 - JPEG 使用子取樣(在一組像素上取樣的顏色)yCbCr,而點陣圖是 RGB。這些色彩空間之間的轉換(以及任何伽瑪調整中)不可避免的損失會引入雜訊。要解決的第二個問題是 JPEG 將影像資料記錄為巨集區塊(NxN 大小的子影像),這必須從解碼器的輸出影像推斷出來。關於 JPEG 格式和編碼過程的更深入的解釋可以在這裡找到http://www.guillermito2.net/stegano/jsteg/

「取消解碼」JPEG:

為了創建原始 JPEG 資料的近似值,我們需要找到宏塊的子取樣、大小和對齊方式,以及用於對其進行編碼的離散餘弦變換 (DCT) 係數。其餘部分與普通 JPEG 編碼過程相同。我想到的一種天真的實現是「有根據的猜測和檢查」:假設使用一些常見的 JPEG 實現來創建圖像,並嘗試應用它們,直到發現 DCT 具有「類似 JPEG」的結果(通常為零)高頻)。

之後,微調係數以獲得與原始影像(即壓縮影像的點陣圖)相比的最小誤差。此過程仍然會導致錯誤和檔案大小之間的權衡,但對於實際目的來說它應該足夠接近。

來源:先前的工作是驗證 DNx 和 ProRes 視訊編解碼器,這些編解碼器將類似 JPEG 的編碼應用於每個單獨的幀(反轉解碼幀的軟體將是一個非常有趣且可能有用的副項目)。

* 存在一組輸入數據,當通過原始 JPEG 解碼器時將產生相同的輸出,但是任何重建都不太可能成為原始文件的位元組副本(忽略元數據),因為資訊在解碼過程中丟失過程。

答案2

JPEG 是一種有損格式,沒有辦法解決它。即使壓縮質量為 100,壓縮比仍為 2.6:1(維基百科 JPEG)。

提出了一些變體無損 JPEG,例如 JPEG 2000,但它們還沒有流行起來,而且支援很差。

您最好轉換為無損格式,例如 巴布亞紐幾內亞,仍然壓縮但沒有損失。

答案3

如果您使用任何編輯器開啟 JPEG 影像並將其儲存為 BMP,您將不會獲得比檔案中已有影像更高的品質.jpg。這就像將低位元率 mp3 檔案(例如 128kbps)轉換為更好的格式(例如 )flac,希望以某種方式神奇地恢復品質。不會的。

正如 harrymc 所說,當您第一次將圖像儲存為 jpg 時,資訊丟失了;無法從該 jpg 檔案中取得該資訊。

有損壓縮是“破壞性的”,也稱為“不可逆的”。看https://en.wikipedia.org/wiki/Lossy_compression

答案4

轉換為 JPEG 時資訊幾乎肯定會遺失。將該文件轉換為 BMP 將保留 JPEG 中存儲的信息,但將 BMP 轉換回 JPEG 可能會導致您丟失更多信息

相關內容