我們可以在不解碼和重新編碼的情況下更改 JPEG 影像的大小嗎?

我們可以在不解碼和重新編碼的情況下更改 JPEG 影像的大小嗎?

我想將 640x480 JPEG 影像轉換為 320x240。我知道可以透過將 JPEG 影像解碼為原始 YCbCr、縮放並將其重新編碼為 JPEG 來完成。但是JPEG編碼是否可以直接縮放影像而不需要解碼呢?

答案1

您可以,但前提是您的 JPEG 檢視器支持智慧秤JPEG 副檔名。傑佩特蘭可以對 N/8 的大小執行此操作,其中 N=1..16。基本上,DCT 區塊大小在重新壓縮期間從 8x8 變更為其他大小(例如 4x4),從而有效地縮放影像。

註:SmartScale 於版本8libjpeg 庫的一部分,但它並未得到觀眾的廣泛支持。

可以在此處找到詳細描述變更的文件:JPEG 的演變

編輯:似乎大多數觀眾實際上無法顯示這些圖像,因為它們基於 libjpeg-turbo。和 libjpeg-turbo選擇不實現此功能。事實上,我已經嘗試了相當多的程式(在 Ubuntu 14.04 和 Windows 8 上),但沒有程式能夠顯示使用 jpegtrans 建立的縮小映像。甚至連 Photoshop、IrfanView 和 GIMP 也失敗了。

編輯2:事實上,Ubuntu 和 Fedora 甚至沒有提供 libjpeg8 函式庫,而是完全用 libjpeg-turbo 版本取代它。因此,除了靜態連結到原始 libjpeg8 庫的一些二進位檔案之外,所有程式都無法讀取 JPEG SmartScale 檔案。

答案2

最簡潔的答案是不。 JPEG 影像使用壓縮,這意味著每個輸出位元組都依賴所有其他位元組。如果更改圖像位元組數,則必須解壓縮並重新壓縮。

由於 JPEG 使用有損壓縮,重新壓縮會導致品質損失,但無論如何,透過將解析度四分之一,您都會損失品質。透過在重新壓縮時提高 JPEG 質量級別,您可以從低解析度影像中獲得盡可能最佳的質量,但這當然會增加檔案大小。

如果您對影像進行大量處理,最好使用無損壓縮格式(例如 PNG),僅在影像完成後轉換為 JPEG,當然前提是您有額外的磁碟空間。

相關內容