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

时间:2016-06-14 11:48:45

标签: matlab save size matlab-figure figure

我正在执行参数扫描。在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

使用resp生成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。

1 个答案:

答案 0 :(得分:4)

可以预期文件大小的差异。

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

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

在您的示例中,您正在更改绘图中的数据,这些数据会更改已保存图像中像素颜色的分布,这最终会将TIFF的文件大小从迭代更改为迭代。您可以期望相同文件大小的唯一方法是,如果您的数据完全相同且数字大小相同。