簡體   English   中英

讀取.JPG圖像並保存,不更改文件大小

[英]Reading a .JPG Image and Saving it without file size change

我想寫一個python代碼,它讀取一個.jpg圖片,改變它的一些RBG組件並再次保存,而不改變圖片大小。

我嘗試使用OpenCV和PyGame加載圖片,但是,當我嘗試使用三種不同的函數進行簡單的加載/保存代碼時,生成的圖像的大小比初始圖像大。 這是我使用的代碼。

>>> import cv, pygame # Importing OpenCV & PyGame libraries.
>>> image_opencv = cv.LoadImage('lena.jpg')
>>> image_opencv_matrix = cv.LoadImageM('lena.jpg')
>>> image_pygame = pygame.image.load('lena.jpg')
>>> cv.SaveImage('lena_opencv.jpg', image_opencv)
>>> cv.SaveImage('lena_opencv_matrix.jpg', image_opencv_matrix)
>>> pygame.image.save(image_pygame, 'lena_pygame.jpg')

原始尺寸為48.3K,結果為75.5K,75.5K,49.9K。

所以,我不確定我是否遺漏了一些讓圖片原始尺寸發生變化的東西,雖然我只是加載/保存,不是嗎?

是否有更好的庫而不是OpenCV或PyGame?!

JPEG是一種有損圖像格式。 當您打開並保存一個時,您將再次對整個圖像進行編碼。 您可以調整質量設置以接近原始文件大小,但無論如何都會丟失一些圖像質量。 沒有一般的方法可以知道原始質量設置是什么,但如果文件大小很重要,你可以猜測,直到你把它關閉。

JPEG輸出的大小取決於3件事:

  1. 原始圖像的尺寸。 在您的情況下,所有3個示例都是相同的。
  2. 圖像中的顏色復雜性。 具有大量細節的圖像將大於完全空白的圖像。
  3. 編碼器中使用的質量設置。 在您的情況下,您使用默認值,對於OpenCV和PyGame,默認值似乎更高。 更好的質量設置將生成一個更接近原始(更少損耗)但更大的文件。

由於JPEG的有損性質,其中一些有點不可預測。 您可以使用特定質量設置保存圖像,打開新圖像並以完全相同的質量設置再次保存,並且由於第一次保存時引入的更改,它可能會略有不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM