c++判断图片格式
来源:互联网 发布:vue.js文件下载和上传 编辑:程序博客网 时间:2024/06/01 08:18
<strong>转自:http://blog.csdn.net/zxlstudio/article/details/10362187</strong>
#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; }
1 0
- 判断图片格式
- 图片格式判断
- 判断图片格式
- 判断图片格式的方法
- c++判断图片格式
- C# 判断是否图片格式
- ios判断图片格式类型
- c#base64图片格式
- 判断内存流中的图片格式
- JAVA正则表达式判断图片格式
- 判断内存流中的图片格式
- flash与字符串:判断图片格式
- 文件头标识判断图片格式
- 判断内存流中的图片格式
- php判断图片格式的代码
- iOS 压缩图片,判断图片格式
- 判断文件是否是图片格式
- BMP图片格式C函数说明
- Tesseract-OCR 进行文字识别 VS2010及不安装opencv,就可以使用opencv
- hive subprocess failed with code X 的错误码对应信息
- Android开发响应检测及内存分析 - 【StrictMode】
- Linux源代码软件的安装与卸载
- 将博客搬至51CTO
- c++判断图片格式
- HBase基本数据操作详解
- solr示例程序
- C语言的字节对齐及#pragma pack的使用
- 对象的克隆——原型模式
- 博客开通
- DB2 查询 表列注释
- 新学MVC和razor的实际用法
- Git Sumary