JPEG文件格式

news/2024/11/24 13:33:15/

1, JPEG文件格式是以 {0XFF, 0XD8}开始,以{0XFF, 0XD9}结束

2, PNG开头是8字节的标识 {0X89, 0X50, 0X4E, 0X47, 0X0D, 0X0A, 0X1A, 0X0A}



http://blog.csdn.net/include1224/article/details/5195470


 

读文件头判断图片类型!

分类: VC++ OpenCV   1947人阅读  评论(3)  收藏  举报

Opencv加载一幅图片的时候只看图片实际的图片格式,与后缀名无关;所以如果一幅图片实际是Opencv支持的图片格式,即使后缀名是txt也没关系。

但如果某个文件打着jpg的后缀名,但实际却是其他乱七八糟的格式,那么如果不加判断的cvLoadImage一幅“图片”,可能就会出错。出错的原因有:1.文件虽然是jpg等图片后缀,但实际不是图片,或者不是Opencv支持的图片----如gif;2.图片不完整(这种情况在读入之前是无法判断的,所以只好用try catch来解决了)。所以在load一幅图片之前最好添加一个判断操作。

.Net里有现成的类可以进行这个判断,如:

[cpp]  view plain copy
  1. System::Drawing::Image^ img_valid = System::Drawing::Image::FromFile("图片路径");//由文件创建一个Image类变量  
  2. if(img_valid->RawFormat->Equals(System::Drawing::Imaging::ImageFormat::Jpeg)||img_valid->RawFormat->Equals(System::Drawing::Imaging::ImageFormat::Bmp)  
  3. ||img_valid->RawFormat->Equals(System::Drawing::Imaging::ImageFormat::Png))  
这里首先由文件路径创建一个Image类,然后判断其实际类型。大部分情况下这是可行的,但如果一个网页文件被修改了后缀名为.jpg,由它来创建一个Image类就会报错!

所以这里我自己写了一个读文件头几个自己来判断是否是图片的函数。首先介绍一下图片文件头表示图片类型的部分:

1.JPEG
- 文件头标识 (2 bytes): 0xff, 0xd8 (SOI) (JPEG 文件标识)
- 文件结束标识 (2 bytes): 0xff, 0xd9 (EOI)

2.TGA
- 未压缩的前5字节    00 00 02 00 00
- RLE压缩的前5字节   00 00 10 00 00

3.PNG
- 文件头标识 (8 bytes)   89 50 4E 47 0D 0A 1A 0A

4.GIF
- 文件头标识 (6 bytes)   47 49 46 38 39(37) 61
                                        G    I   F   8    9 (7)   a

5.BMP
- 文件头标识 (2 bytes)   42 4D
                                         B  M

6.PCX
- 文件头标识 (1 bytes)   0A

7.TIFF
- 文件头标识 (2 bytes)   4D 4D 或 49 49

8.ICO
- 文件头标识 (8 bytes)   00 00 01 00 01 00 20 20

9.CUR
- 文件头标识 (8 bytes)   00 00 02 00 01 00 20 20

10.IFF
- 文件头标识 (4 bytes)   46 4F 52 4D
                                         F   O  R  M

11.ANI
- 文件头标识 (4 bytes)   52 49 46 46
                                         R   I    F   F

对于图片的文件头,大家可以用winhex打开一幅图片就可以看到前面的几个字节。下面是读文件头8个字节然后判断图片类型的函数,因为这里我只需要jpeg/bmp/png格式的,所以其他格式的即使是图片也归到nothing里面。

[cpp] view plaincopy
  1. enum ImageType{  
  2.     jpg,  
  3.     bmp,  
  4.     png,  
  5.     nothing  
  6. };  
  7. ImageType image_type(const char* path)  
  8. {  
  9.     ifstream inFile(path);  
  10.     uchar png_type[9] = {0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A,'/0'};  
  11.     uchar file_head[9];  
  12.     for (int i=0;i<8;++i)  
  13.     {  
  14.         inFile>>file_head[i];  
  15.     }  
  16.     file_head[8] = '/0';  
  17.     switch (file_head[0])  
  18.     {  
  19.     case 0xff:  
  20.         if (file_head[1]==0xd8)  
  21.             return jpg;//jpeg  
  22.     case 0x42:  
  23.         if (file_head[1]==0x4D)  
  24.             return bmp;//bmp  
  25.     case 0x89:  
  26.         if (file_head[1]==png_type[1] && file_head[2]==png_type[2] && file_head[3]==png_type[3] && file_head[4]==png_type[4]&&  
  27.             file_head[5]==png_type[5] && file_head[6]==png_type[6] && file_head[7]==png_type[7])  
  28.             return png;//png  
  29.     default:  
  30.         return nothing;  
  31.     }  
  32. }  



http://www.ppmy.cn/news/703253.html

相关文章

gif、bmp、jpg、jpeg图片有什么区别

图片格式&#xff1a;光栅图片 BMP&#xff1a;Windows 位图 Windows 位图可以用任何颜色深度&#xff08;从黑白到 24 位颜色&#xff09;存储单个光栅图像。Windows 位图文件格式与其他 Microsoft Windows 程序兼容。它不支持文件压缩&#xff0c;也不适用于 Web 页。 从总…

JPEG格式

JPEG的全称是Joint Photographic Experts Group&#xff08;联合图像专家小组&#xff09;&#xff0c;它是一种常用的图像存储格式&#xff0c;其文件后缀名一般为“.jpg”或".jpeg"。JPEG格式可以分为标准JPEG、渐进式JPEG和JPEG2000三种格式。 标准JPEG:该类型的图…

html图片格式有什么,jpeg是一种什么格式?

JPEG(Joint Photographic Experts Group)是JPEG标准的产物&#xff0c;是面向连续色调静止图像的一种压缩标准。 JPEG格式是最常用的图像文件格式&#xff0c;后缀名为.jpg或.jpeg。 JPEG是用于连续色调静态图像压缩的一种标准&#xff0c;文件后缀名为&#xff0c;jpg或&#…

怎么把照片改成jpg格式?照片如何转换jpg格式?

如果小伙伴们有从网上收集图片资料&#xff0c;就会发现这些照片基本都是以PNG格式或者webp格式保存&#xff0c;如果没有处理很难用在其他应用上。这时候应该将图片转换jpg格式&#xff0c;在这里分享一个通用的图片格式转换的方法分享给小伙伴们&#xff0c;利用这款图片格式…

JPG 的图片格式详解

JPG jpg全名是JPEG 。JPEG 图片以 24 位颜色存储单个光栅图像。JPEG 是与平台无关的格式&#xff0c;支持最高级别的压缩&#xff0c;不过&#xff0c;这种压缩是有损耗的。渐近式 JPEG 文件支持交错。 jpg功能   可以提高或降低 JPEG文件压缩的级别。但是&#xff0c;文件…

几种基本图片格式的区别与不同(bmp,jpg,png,gif,tif)

Hello&#xff0c;我们又见面了&#xff01; 本文为EricNTH的原创博客&#xff0c;转载请注明出处。 本文写于两年前&#xff0c;有一万多阅读&#xff0c;本人实在激动&#xff0c;便扩充了webp、ico、svg、raw等内容&#xff0c;修正了原有的错误内容&#xff0c;搬到了我自…

jpeg图片格式详解

jpeg图片格式详解 1. JPEG文件简介 JPEG的全称是JointPhotographicExpertsGroup&#xff08;联合图像专家小组&#xff09;&#xff0c;它是一种常用的图像存储格式&#xff0c; jpg/jpeg是24位的图像文件格式&#xff0c;也是一种高效率的压缩格式&#xff0c;文件格式是JPEG&…

【图像】jpg与jpeg的区别

大家在浏览网页时&#xff0c;总能看到各种各样的精美图片&#xff0c;将这些图片下载下来后&#xff0c;有可能是JPG格式&#xff0c;也可能是JPEG格式&#xff0c;当然还有其它PNG、GIF等格式&#xff0c;相对于PNG等格式来说&#xff0c;JPG格式的体积相对较小&#xff0c;这…