为什么在循环中生成的 Matlab 图形文件大小略有不同?

Why do Matlab figures generated in a loop have slightly different file sizes?

我正在执行参数扫描。在 for 循环中,参数的值被更改。基于此参数,生成绘图并保存为 .tiff 文件。

我注意到生成的文件的文件大小略有不同,例如

215, 222, 223, 215, 210, 196, 195, 195, 195, 195 kB.

我想知道为什么它们的文件大小不完全相同?

编辑:MWE

1. tiff

正在执行

for a=1:3
    b=1:.01:10;
    h=figure(1);
    plot(b,sin(a*b))
    set(h,'units','normalized','outerposition',[0 0 1 1]);
    filename=horzcat('test_',num2str(a),'.tiff');
    print('-dtiff',filename)
end

分别生成 3 个文件。文件大小 79、95、110kB。

2。 bmp

正在执行

for a=1:3
    b=1:.01:10;
    h=figure(1);
    plot(b,sin(a*b))
    set(h,'units','normalized','outerposition',[0 0 1 1]);
    filename=horzcat('test_',num2str(a),'.bmp');
    print('-dbmp16m',filename)
end

生成 3 个文件,文件大小相同:3165kB。

文件大小的差异在意料之中。

在位图图像(未压缩)中,每个像素的颜色值都存储在一个文件中。所有像素是白色、黑色还是将存储每个像素的值都无关紧要。因此,所有位图图像(具有相同的尺寸和颜色深度)都将具有相同的大小。您使用的是 24 位位图,这意味着在您的图中 每个像素 分配了 24 位。 More information on bitmaps.

另一方面,TIFF 稍微复杂一些。正如@Andras 所述,TIFF 可以被压缩,压缩 取决于图像内容。例如,如果图像全是黑色,则 高度可压缩 因为整个图像只有一个颜色值(导致文件大小更小)。如果每个像素都是不同的颜色,则可压缩性较低(导致文件较大)。

在您的示例中,您正在更改绘图中的数据,这会改变您保存的图像中像素颜色的分布,这最终会在迭代之间稍微改变 TIFF 的文件大小。如果您的数据 完全 相同并且图形大小相同,那么您可以获得相同文件大小的唯一方法。