我遇到了一个奇怪的问题 - 我有大约1450万个位图图像,据说是未压缩的。我需要将这些位图转换为JPG格式并存储在数据库中。
当我使用.NET System.Drawing库中提供的类将位图保存为ImageFormat.Jpeg时,生成的JPEG文件大小约为原始位图的两倍。以下是代码:
我查看了几个图像的HEX代码,发现压缩设置为“none”。因此我认为它们是未经压缩的。此外,原始文件的HEX代码具有“BMP”代码,而结果文件具有预期的“JFIF”代码。
这些图像是黑白的,没有颜色。
您有什么想法,为什么会出现这种情况?希望能给出正确方向的指针...
编辑:
- 我尝试使用允许您指定质量的替代重载保存。但没有看到任何好处。 - 我也应该说明,我在某种程度上被JPEG所困。这是一个传统系统,系统的其他部分需要JPEG。
图像属性:
- 位图尺寸:152x48 - 位图文件大小:1022字节 - JPEG:相同的尺寸 - JPEG大小:2.2 kb - 位图信息:索引,1层(2种颜色) - 位图分辨率:96.012x96.012 ppi
当我使用.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代码,发现压缩设置为“none”。因此我认为它们是未经压缩的。此外,原始文件的HEX代码具有“BMP”代码,而结果文件具有预期的“JFIF”代码。
这些图像是黑白的,没有颜色。
您有什么想法,为什么会出现这种情况?希望能给出正确方向的指针...
编辑:
- 我尝试使用允许您指定质量的替代重载保存。但没有看到任何好处。 - 我也应该说明,我在某种程度上被JPEG所困。这是一个传统系统,系统的其他部分需要JPEG。
图像属性:
- 位图尺寸:152x48 - 位图文件大小:1022字节 - JPEG:相同的尺寸 - JPEG大小:2.2 kb - 位图信息:索引,1层(2种颜色) - 位图分辨率:96.012x96.012 ppi