为什么是JPEG图像创建系统。绘图比原来的位图?
-
05-07-2019 - |
题
我有一个奇怪的问题-我有大约14.5万位图,这被认为是压缩。我需要转换这些位图以JPG并将其存储在一个数据库。
当我使用的课程设置的。网系统。图库保存的图作为一个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);
}
}
我已经看过六角的几个这样的图像,它看起来像压缩设定为"无"。所以我假设它们被压缩。此外,六角的原始文件有"BMP"代码和结果文件有"JFIF"的代码如你所期望的。
图像是黑色和白色的,没有颜色。
任何想法为什么这会发生?寻找指针在正确的方向...
编辑:
- 我已经试过使用替代过载保存,允许指定的质量。没有任何好处看到。
- 我还应当指定我是那种坚持JPEG某种程度上在这里。这是一个遗留系统和系统的其他部分的预期JPEG。
图像属性:
- 位尺寸:152x48
- 图文件的尺寸:1022字节
- JPEG:同样尺寸
- JPEG尺寸:2.2kb
- 位的信息:编制索引,1层(2颜色)
- Bitmap决议:96.012x96.012ppi
解决方案
这可能是因为jpeg图像你是节省是现在的24位RGB颜色图像,其中的位图1位黑色和白色的图像。
如果位图1位,jpeg可能不是最好的格式来转换他们。
其他提示
黑色和白或灰度?
从 http://www.faqs.org/faqs/compression-faq/part2/section-6.html:
"JPEG的作品在全颜色或灰图像;它并不能处理 双层(黑白)图像,至少不好。它不处理 colormapped图像;你必须先扩大这些成映射 全色的表示。JPEG工作最好在"连续的音"的图像。像许多突然跳在颜色的价值不会缩。"
你会想切换到使用 这个过载位图。保存, 所以你可以指定 EncoderParameter.
为什么你的文件被越来越大,这可能是你的BMP运行长度编码,或者使用一个较小(不24位)bitmap.
一个比较大小为2色61x64图像:
- 传真-4tiff:268字节
- 2色bmp(如上):550字节
- 8位jpeg:1502字节
- 32位jpeg(作为系统。图会 创建):2015字节
所以,如果你有使用jpeg,将它们转化至8位第一。这样做。净将是尴尬的,但有样品代码可用于演示和其他人。
只是想来跟踪我的解决方案。我能得到系统的其余部分,以支持PNG格式的图形,那么我所做的就是换位图进入新的图形,以及使他们1点每素黑色和白色。这使他们小小的和有效的。
所以问题是,Jpg格式,只是没做几个颜色的图像。
看看这里(如何:设置JPEG压缩职等)对于一些见解和实例,ImageCodecInfo和EncoderParameters是钥匙
只是一个想法:你说的一部分的你的系统需要的文件是JPEG文件。是真的,或者它是否只是需要的文件有JPG扩展?如果是这样,你可能--虽然它是丑陋的-只是重新命名的文件的扩展,因为BMP文件在您的案件是较小的。
例如,在Windows,你可以把一个BMP文件,并改变它的扩展到JPG,当你打开它,Windows不关心,并显示正确。
这kb的文章应该告诉你如何做到这一点