现在的位置: 首页 > 综合 > 正文

c++实现获取图片文件格式

2013年10月20日 ⁄ 综合 ⁄ 共 4473字 ⁄ 字号 评论关闭
#include <stdio.h>

 #include <stdlib.h>

 #include <string.h>

 #include <assert.h>

 #include <errno.h>

  

 #define GETBYTELEN   2

 #define IMAGE_YES    1

 #define IMAGE_NO     0

  

 /*---JPEG/JPG(1)---*/

 #define IMAGE_JPEG_TYPE  0x01

 #define IMAGE_JPEG_JPG "JPEG/JPG"

 #define JPEG_FIRSTBIT  "FF"

 #define JPEG_SECONDBIT "D8"

  

 /*---BMP(2)---*/

 #define IMAGE_BMP_TYPE  0x02

 #define IMAGE_BMP     "BMP"

 #define BMP_FIRSTBIT  "42"

 #define BMP_SECONDBIT "4D"

  

 /*---PNG(3)---*/

 #define IMAGE_PNG_TYPE  0x04

 #define IMAGE_PNG     "PNG"

 #define PNG_FIRSTBIT  "89"

 #define PNG_SECONDBIT "50"

  

 /*---GIF(4)---*/

 #define IMAGE_GIF_TYPE 0x08

 #define IMAGE_GIF     "GIF"

 #define GIF_FIRSTBIT  "47"

 #define GIF_SECONDBIT "49"

 #define GIF_THIRDBIT  "46"

 #define GIF_FIFTHBIT1 "39"   // 可能存在是37

 #define GIF_FIFTHBIT2 "37"

  

 /*---TIFF(5)---*/

 #define IMAGE_TIFF_TYPE  0x10

 #define IMAGE_TIFF      "TIFF"

 #define TIFF_FIRSTBIT   "4D"

 #define TIFF_SECONDBIT  "4D"

 #define TIFF_FIRSTBIT2  "49"  // 或者

#define TIFF_SECONDBIT2 "49"

  

 /*---ICO(6)---*/

 #define IMAGE_ICO    "ICO"

 #define ICO_THIRDBIT "1"  // 01

 #define ICO_FIFTHBIT "1"  // 01

  

 /*---TGA(7)---*/

 #define IMAGE_TGA    "TGA"

 #define TGA_THIRDBIT "2"  // 02

 #define TGA_FIFTHBIT "0"  // 00

  

 /*---CUR(8)---*/

 #define IMAGE_CUR    "CUR"

 #define CUR_THIRDBIT "2"  // 02

 #define CUR_FIFTHBIT "1"  // 01

  

 /*---PCX(9)---*/

 #define IMAGE_PCX    "PCX"

 #define PCX_FIRSTBIT "A"  // 0A

  

 /*---IFF(10)---*/

 #define IMAGE_IFF     "IFF"

 #define IFF_FIRSTBIT  "46"

 #define IFF_SECONDBIT "4F"

 #define IFF_THIRDBIT  "52"

 #define IFF_FORTHBIT  "4D"

  

 /*---ANI(11)---*/

 #define IMAGE_ANI     "ANI"

 #define ANI_FIRSTBIT  "52"

 #define ANI_SECONDBIT "49"

 #define ANI_THIRDBIT  "46"

 #define ANI_FORTHBIT  "46"

  

 /* 根据图片文件头部数据判断*/

int Check_Image_Header(void *FileData)

 {

 unsigned char *imagebuf = (unsigned char *)FileData;

 // unsigned char firstBit[3];

 // unsigned char secondBit[3];

 // unsigned char thirdBit[3];

 // unsigned char forthBit[3];

 // unsigned char fifthBit[3];

 unsigned char checkBit[5][3];

  

 if(NULL == imagebuf){

 return IMAGE_NO;

 }

  

 snprintf(checkBit[0], sizeof(checkBit[0]), "%X", imagebuf[0]);

 snprintf(checkBit[1], sizeof(checkBit[1]), "%X", imagebuf[1]);

 snprintf(checkBit[2], sizeof(checkBit[2]), "%X", imagebuf[2]);

 snprintf(checkBit[3], sizeof(checkBit[3]), "%X", imagebuf[3]);

 snprintf(checkBit[4], sizeof(checkBit[4]), "%X", imagebuf[4]);

  

 // snprintf(firstBit,  sizeof(firstBit),  "%X", imagebuf[0]);

 // snprintf(secondBit, sizeof(secondBit), "%X", imagebuf[1]);

 // snprintf(thirdBit,  sizeof(thirdBit),  "%X", imagebuf[2]);

 // snprintf(forthBit,  sizeof(forthBit),  "%X", imagebuf[3]);

 // snprintf(fifthBit,  sizeof(fifthBit),  "%X", imagebuf[4]);

  

 if( (0 == strncmp(checkBit[0], JPEG_FIRSTBIT,  GETBYTELEN)) && 

 (0 == strncmp(checkBit[1], JPEG_SECONDBIT, GETBYTELEN))) {

 return IMAGE_YES;

 }

 if( (0 == strncmp(checkBit[0], BMP_FIRSTBIT,  GETBYTELEN)) && 

 (0 == strncmp(checkBit[1], BMP_SECONDBIT, GETBYTELEN))) {

 return IMAGE_YES;

 }

 if( (0 == strncmp(checkBit[0], PNG_FIRSTBIT,   GETBYTELEN)) && 

 (0 == strncmp(checkBit[1], PNG_SECONDBIT, GETBYTELEN))) {

 return IMAGE_YES;

 }

 if( (0 == strncmp(checkBit[0], GIF_FIRSTBIT,   GETBYTELEN))   &&

 (0 == strncmp(checkBit[1], GIF_SECONDBIT, GETBYTELEN))   &&

 (0 == strncmp(checkBit[2], GIF_THIRDBIT,   GETBYTELEN))   &&

 ((0 == strncmp(checkBit[4], GIF_FIFTHBIT1, GETBYTELEN))   || 

 (0 == strncmp(checkBit[4], GIF_FIFTHBIT2, GETBYTELEN)))) {

 return IMAGE_YES;

 }

 if( ((0 == strncmp(checkBit[0], TIFF_FIRSTBIT,    GETBYTELEN))  && 

 (0 == strncmp(checkBit[1], TIFF_SECONDBIT,  GETBYTELEN))) ||

    ((0 == strncmp(checkBit[0], TIFF_FIRSTBIT2,   GETBYTELEN))  &&

     (0 == strncmp(checkBit[1], TIFF_SECONDBIT2, GETBYTELEN)))) {

 return IMAGE_YES;

 }

 if( (0 == strncmp(checkBit[2], ICO_THIRDBIT, GETBYTELEN)) && 

 (0 == strncmp(checkBit[4], ICO_FIFTHBIT, GETBYTELEN))){

 return IMAGE_YES;

 }

 if( (0 == strncmp(checkBit[2], TGA_THIRDBIT, GETBYTELEN)) && 

 (0 == strncmp(checkBit[4], TGA_FIFTHBIT, GETBYTELEN))){

 return IMAGE_YES;

 }

 if( (0 == strncmp(checkBit[2], CUR_THIRDBIT, GETBYTELEN)) && 

 (0 == strncmp(checkBit[4], CUR_FIFTHBIT, GETBYTELEN))){

 return IMAGE_YES;

 }

 if(0 == strncmp(checkBit[0], PCX_FIRSTBIT, GETBYTELEN)){

 return IMAGE_YES;

 }

 if( (0 == strncmp(checkBit[0], IFF_FIRSTBIT,  GETBYTELEN))   &&

 (0 == strncmp(checkBit[1], IFF_SECONDBIT, GETBYTELEN))   &&

 (0 == strncmp(checkBit[2], IFF_THIRDBIT,   GETBYTELEN))   &&

 (0 == strncmp(checkBit[3], IFF_FORTHBIT,   GETBYTELEN))) {

 return IMAGE_YES;

 }

 if( (0 == strncmp(checkBit[0], ANI_FIRSTBIT,   GETBYTELEN))   &&

 (0 == strncmp(checkBit[1], ANI_SECONDBIT, GETBYTELEN))   &&

 (0 == strncmp(checkBit[2], ANI_THIRDBIT,   GETBYTELEN))   &&

 (0 == strncmp(checkBit[3], ANI_FORTHBIT,   GETBYTELEN))) {

 return IMAGE_YES;

 }

  

 return IMAGE_NO;

 }

  

 int main(int argc, char *argv[])

 {

 int res = -1;

 char image_data[10];

 FILE *fd = NULL;

  

 if(argc < 2){

 printf("usage: %s <imagefilename>\n", argv[0]);

 exit(1);

 }

  

 assert(argv[1] != NULL);

 if( (fd = fopen(argv[1], "rb")) == NULL){

 perror("fopen error\n");

 exit(1);

 }

  

 fread(image_data, sizeof(unsigned char), sizeof(image_data), fd);

 printf("Image_head = %d\n", Check_Image_Header(image_data));

  

 printf("name = %d\n", res);

  

 fclose(fd);

 return 0;

 }

抱歉!评论已关闭.