同一张1920×1200的照片,JPG是611.75KB,转成BMP后是6.75MB。这不是转换出了错,而是BMP里根本没有压缩这一步:每个像素的红绿蓝三个分量都原样写进文件,不管用不用得上。

像素总数是1920乘1200,共2304000个。BMP默认按24位存,也就是每个像素3个字节,一个给红、一个给绿、一个给蓝。
2304000乘3等于6912000字节,换成MB是6.75。这就是文件的主体,一分不多一分不少。
JPG的611.75KB能装下同样的画面,是因为它先把8×8的块换算成频率系数,再按人眼不敏感的程度丢掉一部分。BMP不做这件事,所以它的大小只跟尺寸有关,跟画面里是天空还是一片树叶毫无关系。
JPEG的编码链是分块、变换、量化、熵编码,每一环都在减少要写的字节。BMP跳过全部四步,直接把像素矩阵按行写下去。
它只保留一个很轻的预处理:每一行的字节数要凑成4的倍数。1920乘3等于5760,本来就是4的倍数,不用补;宽度若是1921,每行要多补几个字节,文件会比按像素算出来的略大。
这也解释了一个现象:同一张图转BMP,换什么软件、什么系统,出来的体积几乎一样。因为没什么参数可调,BMP不是压缩格式,只是个容器。
第一步,打开图片转格式页面,先定好目标格式再上传。
第二步,在格式下拉里挑bmp。下拉里还有jpg、png、webp、tiff,选错一项结果差很远。
第三步,上传一张原图,页面会显示源文件大小和源格式。

第四步,点开始转换。转换完成后页面只告诉你当前格式是bmp,不给转换后的体积。
第五步,点保存图片,下载到本地,在文件属性里看大小,再和原文件比一次。
老式排版软件、部分打印机驱动、某些工业设备的读图模块只认BMP,这种场合该用就用,体积大不是问题。
需要网络传输、上传表单、放进文档的图片,不要用BMP。它比JPG大一个数量级,比PNG也大得多,因为PNG虽然无损,至少做了一次无损压缩。
既要保留每个像素原值又想让体积小一点,PNG是更合适的选择;只想把文件压小、能接受细节损失,回到JPG图片压缩按压缩等级处理。
BMP转回JPG,画质能恢复吗?
不能。BMP只是把已经损失过的像素原样存下来,之前丢掉的细节不会因为换了容器回来。
为什么我的BMP只有几百KB?
大概率不是24位真彩色。8位索引色BMP每个像素只占1个字节,体积是24位的三分之一左右,颜色数被限制在256种。
BMP和PNG都是无损,为什么PNG小那么多?
PNG对像素做了一次无损压缩,重复的行和相同的像素只记一次;BMP连这一步都省了。
把BMP看成一张没有打包的原始像素表,体积就不用猜了:宽乘高乘3,算出来就是它。