640x480 JPEG的最大尺寸是多少?


25

我正在创建一个数据存储设备,该设备可以在几个小时内拍摄一定数量的夜空图片,并且在拍摄完所有图片后立即将其下载。存储卡必须能够一次存储所有照片。

将要拍摄的JPEG为640x480像素,并且至关重要的是,存储卡上必须有足够的空间来容纳全部100个像素。那么,640x480 JPEG的最大尺寸是多少?

我已经拍了一些测试照片来解决这个问题:

#1#2#3

  • “ stackoverflow”映像的文件大小为73,774字节。
  • 白色图像的文件大小仅为36,607字节。
  • 但是,方格照片的文件大小为149,339字节。

我假设文件的大小随着复杂性的增加而增加。

如何在存储卡上建立足够的空间以容纳100 640x480 JPEG,而又不知道它们的复杂程度和大小?我不想浪费额外的空间,因为我可能要制造许多这样的捕获设备。


这取决于图像生成器。100质量的JPEG可以轻松放大尺寸。您的相机和相机设置是什么?
John Dvorak

测试相机是佳能Powershot A1100 IS。有关更多信息,您可以检查元数据,因为我不确定您要什么。
Blue Ice

1
您是否已在dif拍摄了夜空的任何样本照片。Q设置?作为测试?
卡尔B

2
这是做什么用的?您确定jpeg是正确的格式选择。
杰克·艾德利

3
为Jack Aidleys评论添加一些背景:JPEG压缩更改了图片。它进行假设并丢弃信息以获取较小的文件大小。(除非设置为100%的质量,在这种情况下,您最好使用未压缩的格式。通常,数码相机为此设置了tiff甚至是原始设置。如果要保留所有小点(例如星号),请使用这些)。这也将使图像的大小完全可预测。
Hennes

Answers:


22

在这里,我建议JPEG文件大小的上限。有关更典型的jpeg大小的讨论,请参见Ilmari Karonen的答案

可以像这样计算640X480 32位位图图像的像素存储空间(基于答案,但根据Ignacio Vazquez-Abrams的评论和答案进行校正):

假设未对文件应用压缩,则有307,200像素,即0.3MP。方便的查询表

如果每个像素包含32位信息,则

  1. 307,200 * 32 = 9,830,400位信息
  2. 除以8位成为字节值
  3. 9,830,400 / 8 = 1228800字节(或1.17 Mb)

这是未压缩的位图的大小,因此应该是jpeg文件大小的上限(实际上,因为JPEG格式使用compression,所以您的图像应该小得多,尤其是考虑到您要拍摄夜间照片时)天空,我想其中包含很多黑色。请注意,问题中最大的示例图像仅为0.14 MB)。

但是,关于您的特定问题,即使使用该上限,100张图像也只有117 MB,而且自从我看到容量为128 MB的存储卡以来已经很长时间了。我怀疑任何当前可用的存储卡都将具有足够的容量来满足您的需求。

显然,最大jpeg文件大小的问题尚待商debate。这个堆栈溢出的答案建议理论上最大像素大小为20.25字节/像素,但在您的情况下为5.9 MB,但是生成该大小的图像需要故意滥用jpeg格式的压缩方案,因此,您极不可能看到这样的图像相机产生的东西。


1
不幸的是,即使未压缩的位图值也有点低,因为它假定打包。解压缩后的位图每个像素使用32位(出于对齐原因),从而使文件大小增加了33%。
伊格纳西奥·巴斯克斯

谢谢@ IgnacioVazquez-Abrams。这就是我假设一个可接受的答案是正确的。
ForeverWintr

1
@ IgnacioVazquez-Abrams-“对齐”是由处理器(不是存储介质)指定的属性,当数据在RAM中进行处理时非常方便。出于存储目的,32位字对齐不是必需的,而且肯定是多余的。打包数据是写入存储之前的常见操作,特别是节省了25%的时间。我见过数码相机将原始格式的每个像素精确地存储在3个字节中。
锯末

1
“……当然是奢侈的。” 如今。许多月亮之前,它曾经被认为是一种节省周期的功能(鉴于需要花费多长时间,因此无需在负载上对齐)。
伊格纳西奥·巴斯克斯

3
在实践中,虽然一些系统可能存储的RGB图像数据作为4每像素字节存储器,几乎所有的图像文件格式使用每个像素的3个字节至多(除非有存储在第四字节的实际alpha通道)。请参阅下面的答案。
Ilmari Karonen

35

只是检查一下,让我通过实验测试ForeverWintr的分析

用于JPEG压缩(或实际上是任何压缩)的最糟糕的输入图像是均匀随机的RGB噪声,这在理论上是不可压缩的。因此,让我使用netpbm工具生成一些信息:

$ rawtoppm < /dev/urandom 640 480 > rnd.ppm
$ pnmtopng < rnd.ppm > rnd.png
$ du -b rnd.*
923772  rnd.png
921615  rnd.ppm

均匀随机的RGB噪声,无损PNG格式
(均匀随机的RGB噪声,无损PNG格式,903 kb)

注意(2017年3月):我很确定上面的图像我最初编写此答案并在2013年上传时的PNG格式。似乎它已在某个时刻被无声转换为JPEG,从而使此处的视觉比较变得无用。

我尝试重新上传新的PNG测试图像,但显然它在imgur达到了某种任意PNG文件大小的限制,并被自动转换为JPEG。我不确定是否可以解决此问题,但是至少如果您可以访问Linux机器,则始终可以重新运行给定的命令来生成自己的测试映像。在任何情况下,除了防止直接视觉比较压缩质量外,这都不会使下面的分析无效。

好的,因此未压缩的PPM文件的长度为640×480×3 = 921,600字节,再加上15个字节的最小PPM标头,正如预期的那样。尝试使用PNG格式进行无损压缩只会使大小增加2157字节,这大概是由PNG标头和元数据占用的,并且在尝试压缩不可压缩数据的压缩算法中可能效率不高。

(是的,这是每个像素3个字节,而不是4个字节;即使PPM格式(大约与图形文件格式一样简单)也不够笨拙,无法在磁盘上每个像素存储无用的第四个字节。可能有一些出于对齐原因而在内存中这样做的好处,尤其是在您还需要存储Alpha通道的情况下,但是在将图像写入文件时,这些原因并不适用。)

好,那么JPEG呢?让我们首先尝试最小化压缩损耗(质量= 100,无色度二次采样,浮点DCT)。不幸的是,pnmtojpeg手册没有明确说明如何设置所有相关选项(特别是,该-sample选项在“向导的选项”部分列出,该选项仅引用libjpeg文档中的文件),因此我将其转换为而是GIMP。生成的文件如下所示:

897249  rnd.jpg

JPEG压缩RGB噪波,质量= 100,无色度二次采样
(JPEG压缩的RGB噪声,质量= 100,无色度二次采样,876 kb)

什么,怎么会更小?我不是只是说纯净的声音是不可压缩的吗?好吧,事实是,即使以最高的质量,普通的JPEG压缩也不无损的。在GIMP中重新打开图像并将其与原始图像进行比较,可以看到某些像素的颜色值偏移了一到两步(共256个)。这些像素是JPEG压缩算法被“欺骗”并在此处丢掉了一点,在此处又丢掉了一些,估计变化不会引起注意。的确,用肉眼无法看到的结果与原始图像几乎没有区别,但是即使考虑了标头和编码开销,那些被丢弃的位的确也增加了文件大小的可测量的减小。

这就是最高的质量;关于更典型的设置(例如pnmtojpeg默认设置(质量= 75,启用了二次采样))呢?让我们尝试一下:

$ pnmtojpeg < rnd.ppm > rnd2.jpg
$ du -b rnd2.jpg
185128  rnd2.jpg

JPEG压缩RGB噪点,质量= 75,色度二次采样
(JPEG压缩的RGB噪声,质量= 75,色度二次采样,184 kb)

哇,从901下降到184 kb!但是,这是非常激进的压缩,并且当您仔细比较图像时,您绝对可以分辨出区别。大部分是因为色度二次采样,它基本上只丢弃了75%的颜色(色相/饱和度)数据。在禁用了二次采样的GIMP中进行尝试,可以得到一个350,618字节的文件,即使放大后,该文件看起来(至少对人来说还是非常接近)原始文件。

无论如何,这一切的关键是要证明,无论多么嘈杂的夜空照片可能是,无论你可能在如何高品质的选择,但只是没有办法一个640×480的JPEG文件,可以得到比900显著大kb。(好吧,除非您的相机在其上附加了一个多兆字节的Exif颜色配置文件或同样愚蠢的东西。)而且,如果您使用的是更典型的JPEG压缩设置,则最大可能的文件大小会降至200 kb左右。 。


4
从理论上讲,仅对于无损压缩是不可压缩的,对吧?
丹尼尔·贝克

1
@DanielBeck:对。显然,如果愿意只丢弃部分数据,则可以根据需要压缩任意数量的数据。(这基本上就是JPEG压缩的作用,它只是尝试以这样的方式进行操作:丢失的部分对人眼来说是不可见的,并且剩余的部分可以紧凑地编码。噪声仍然是一个很困难的情况,因为只有一点甚至有损压缩算法,可以用噪声能做的就是扔掉它的一部分)。
ILMARI Karonen

也许只是我一个人,但是第二张图像看起来比第一张要亮。
Bogdacutu

@Bogdacutu:不应该这样,尽管您的浏览器总是有可能在颜色管理等方面做一些奇怪的事情。尝试将它们同时加载到图形编辑器中并比较颜色值。
Ilmari Karonen

不错的文章@Ilmari。
ForeverWintr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.