我想写一个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?!
答案 0 :(得分:7)
JPEG是一种有损的图像格式。当您打开并保存一个时,您将再次对整个图像进行编码。您可以调整质量设置以接近原始文件大小,但无论如何都会丢失一些图像质量。没有一般的方法可以知道原始质量设置是什么,但如果文件大小很重要,你可以猜测,直到你把它关闭。
答案 1 :(得分:3)
JPEG输出的大小取决于3件事:
由于JPEG的有损性质,其中一些有点不可预测。您可以使用特定的质量设置保存图像,打开新图像并以完全相同的质量设置再次保存,并且由于第一次保存时引入的更改,它可能会略有不同。