读取.JPG图像并保存它而不改变文件大小

2024-09-28 22:04:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个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更好的库吗?!


Tags: 代码图像image组件图片opencvpygamematrix
2条回答

JPEG是一种有损图像格式。当您打开并保存一个时,您将再次对整个图像进行编码。您可以调整质量设置以接近原始文件大小,但无论如何,您都会丢失一些图像质量。没有一般的方法知道最初的质量设置是什么,但是如果文件大小很重要,你可以猜测直到你接近它。在

JPEG输出的大小取决于三个因素:

  1. 原始图像的尺寸。在你的例子中,这三个例子都是一样的。在
  2. 图像中颜色的复杂性。一个有很多细节的图像比一个完全空白的图像要大。在
  3. 编码器中使用的质量设置。在您的例子中,您使用了默认值,对于OpenCV和PyGame来说,默认值似乎更高。一个更好的质量设置将生成一个更接近原始文件(损失更小)但更大的文件。在

由于JPEG的有损特性,有些情况是不可预测的。您可以使用特定的质量设置保存图像,打开新图像并以完全相同的质量设置再次保存它,由于第一次保存时所做的更改,它的大小可能会略有不同。在

相关问题 更多 >