将BMP转换为PNG
BMP原样存储每个像素——PNG以无损方式存储同样的像素,体积只有一小部分。图片不变,格式更现代,不存储任何文件。
- 绝不存储
- 无需排队,无需等待
- 无需注册,无水印
使用方法
添加BMP
将任意数量的.bmp文件拖放到页面上。
转换
每个文件都会变成无损压缩的PNG——像素完全相同,文件小得多。
下载
可逐个保存,也可打包成ZIP下载。
像素不变,体积只剩一小部分
BMP通常完全没有压缩。每个像素都原样写入,每个占三到四个字节,每行还要补齐到四字节边界——所以一张1920×1080的截图约有8 MB,一张1200万像素的照片接近36 MB。PNG存储完全相同的像素,并对其进行无损压缩,所以图片本身毫无变化,而文件通常会缩小到原来的五分之一到二十分之一。对于有大片纯色区域的截图或图表,压缩比处于这个范围的高端。这是少有的毫无取舍的转换。
结果中有一个细节值得检查:32位BMP中的透明背景并不可靠,而且原因不在这里的处理。最初的Windows位图文件头没有Alpha通道的概念,所以每个像素的第四个字节只是闲置;后来的文件头对它作了正式定义,但仍有大量软件写入旧格式,也仍有大量解码器忽略新格式。因此,一个在创建它的程序中看起来透明的BMP,解码时可能是不透明的,Alpha字节被当成了填充。如果透明很重要,请先检查PNG再使用。
行的顺序是另一个怪癖。BMP按惯例从下到上存储各行,这是沿袭早期图形硬件的内存寻址方式,并用负数高度来标记从上到下存储的文件。解码器两种都能处理,所以实际使用中看不出来——这只是为什么写了一半或被截断的BMP会上下颠倒显示,而不是被截掉。
常见的Windows变体都能转换。这种格式的冷门角落——RLE压缩的4位和8位位图、九十年代初的OS/2文件头,以及罕见的内嵌JPEG形式——取决于解码器;如果其中某一种被拒绝,会明确提示,而不会生成一张错乱的图片。
如果您需要的是别的
想进一步压缩PNG,oxipng -o 4 out.png或optipng往往还能再减少10%到30%,而且一个像素都不改变;pngquant把颜色缩减为调色板,能压得更多——这是有损的,但对截图或图表来说通常看不出来。
如果是一整个文件夹,ImageMagick的magick mogrify -format png *.bmp一行命令就能全部转换,libvips处理超大图片时只用一小部分内存就能完成同样的工作。如果这些BMP是照片而不是图形,PNG根本就不是合适的目标格式——JPG的体积只有十分之一,画质差别没人看得出来。
常见问题
画质会有损失吗?
完全不会——PNG是无损格式。PNG解码后的像素与BMP中的完全一致,去掉的只是浪费的字节。
能小多少?
视内容而定,通常小50-95%——BMP基本上没有压缩,所以几乎怎么压都更小。
如今BMP都是从哪来的?
旧工具截的Windows截图、MS Paint(画图)、科学仪器、嵌入式系统和老旧软件。这种格式可以追溯到Windows 3.0。
我的文件会被存储吗?
不会——转换过程不存储任何文件。
PNG能容纳BMP的所有内容吗?
能,而且更多——PNG增加了真正的透明背景,而BMP实际上从未支持过。
小贴士: 少见的BMP变体(RLE压缩、OS/2文件头)取决于您浏览器的解码器;常见的Windows BMP都能正常转换。
把这个工具放到您的网站上
博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。