2 回答

TA貢獻1780條經驗 獲得超1個贊
JPEG、PNG和大多數圖像文件格式不能這樣工作。它們的開頭包含元數據,例如拍照日期、相機型號、GPS 坐標、圖像高度、寬度和版權信息。之后,它們通常以高度優化的壓縮格式存儲像素,因此在不先解壓縮數據的情況下無法更改像素。然后,您可以編輯它們并將它們寫回,使用新的標頭并重新壓縮。因此,我們強烈建議您使用圖書館。
如果您真的不想使用 Python 庫,您可以在終端中使用ImageMagick(命令行工具)將圖像轉換為純 RGB 像素。因此,如果您的圖像被稱為input.jpg
,您可以在終端中運行它:
magick?input.jpg?-depth?8?RGB:pixels.dat
然后,如果您的圖像為 640x480 像素,則調用的文件的pixels.dat
長度將恰好為 640x480x3 字節,沒有標頭、元數據或壓縮。然后您可以完全按照您最初的設想進行處理。之后,您可以使用以下命令將其恢復為 JPEG 或 PNG:
magick?-depth?8?-size?640x480?RGB:pixels.dat?output.jpg
請注意,在從 RGB 字節到 JPEG 的返回過程中,您必須如何告訴ImageMagick圖像的高度和寬度,因為文件開頭沒有標頭說明其高度和寬度。

TA貢獻1777條經驗 獲得超10個贊
我知道它正在通過輸出輸出每個像素的信息,因為沒有值高于 255 或低于 0
此行為的原因與“每個像素的信息”不同 - 您只是訪問了文件的各個字節,并且 1 字節值始終是從0x00
(包括)到0xFF
(包括)。如果您對其他類型的文件(例如文本文件)執行此操作,結果將類似。
此代碼復制圖像的二進制數據并成功創建一個新圖像。
您的代碼只是將文件內容復制到另一個文件中。請注意,無論文件類型如何,它都會起作用。
我不想使用任何第三方庫,例如 PIL
按照您的意愿進行操作,但請記住,如果沒有“任何第三方庫”,您必須從頭開始自己實現每種圖像格式的處理。
添加回答
舉報