【问题标题】:Why do Matlab figures generated in a loop have slightly different file sizes?为什么循环生成的 Matlab 图形的文件大小略有不同?
【发布时间】:2016-10-15 03:15:34
【问题描述】:

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

【问题讨论】:

标签: matlab save size matlab-figure figure


【解决方案1】:

文件大小的差异是可以预料的。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 2010-11-26
    • 2012-10-22
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多