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

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

执行后会得到三个文件,分别大小为79KB、95KB和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。


2
我们需要更多的代码才能对此有任何有用的说明。请编辑您的问题以包含一个[mcve]。 - Adriaan
5
因为tiff可能会被压缩?尝试使用bmp格式。或者bmp格式也可以被压缩吗? - Andras Deak -- Слава Україні
@AndrasDeak 好的,看到了我的编辑。 - Karlo
1个回答

4
文件大小的差异是可以预料的。
在位图图像(未压缩)中,每个像素的颜色值都存储在文件中。无论所有像素是白色、黑色还是其他颜色,每个像素的值都将被存储。因此,所有位图图像(相同尺寸和颜色深度)的大小都将相同。您正在使用24位位图,这意味着每个像素分配了24位。有关位图的更多信息,请参见此处
另一方面,TIFF格式则要复杂一些。如@Andras所述,TIFF可以进行压缩,而压缩程度取决于图像内容。例如,如果一个图像全是黑色,则它是高度可压缩的,因为整个图像只有一种颜色值(结果会得到较小的文件大小)。如果每个像素的颜色都不同,则这种情况就不太可压缩(结果会得到较大的文件大小)。
在您的示例中,您正在更改绘图中的数据,这将改变保存图像中像素颜色的分布,从而最终略微改变TIFF文件的文件大小。唯一可以期望相同文件大小的方法是,如果您的数据完全相同并且图形尺寸相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接