我遇到了一个奇怪的问题——我有大约 1450 万张位图图像,据说是未压缩的。我需要将这些位图转换为 JPG 并将它们存储在数据库中。
当我使用 .NET System.Drawing 库中提供的类将位图保存为 ImageFormat.Jpeg 时,生成的 JPEG 大约是原始位图大小的两倍。这是代码:
byte[] bitmapBytes = //get from the db
using(MemoryStream bitmapStream = new MemoryStream(bitmapBytes))
{
using(Bitmap bitmap = (Bitmap)Bitmap.FromStream(bitmapStream))
{
bitmap.Save("jpg.jpg", ImageFormat.Jpeg);
}
}
我查看了其中几个图像的 HEX,看起来压缩设置为“无”。所以我假设它们是未压缩的。此外,原始文件的 HEX 具有“BMP”代码,而生成的文件具有您所期望的“JFIF”代码。
图像是黑白的,没有颜色。
关于为什么会发生这种情况的任何想法?寻找正确方向的指针...
编辑:
- 我尝试使用备用重载来保存,以允许您指定质量。没有看到任何好处。
- 我还应该说明我在这里在某种程度上坚持使用 JPEG。这是一个遗留系统,系统的其他部分需要 JPEG。
图片属性:
- 位图尺寸:152x48
- 位图文件大小:1022 字节
- JPEG:相同尺寸
- JPEG 大小:2.2 kb
- 位图信息:索引,1 层(2 种颜色)
- 位图分辨率:96.012x 96.012 ppi