0

你知道有什么好的图像库可以在内存中获取 JPEG 图像的大小吗?我只需要获取图像的大小。如果可能的话,我宁愿它只是标题。如果我没记错的话,似乎 boost::gil 需要一个第三方库 (libjpeg)。

4

1 回答 1

4

使用以下代码,我们可以验证给定文件是否为 jpeg 图像文件,我们还可以获取图像大小。

int width, height;
FILE *image;
int size, i = 0;
unsigned char *data;

image =fopen("file_name","rb");  // open JPEG image file
if(!image){
   printf("Unable to open image \n");
}
fseek(image,  0,  SEEK_END);
size = ftell(image);
fseek(image,  0,  SEEK_SET);
data = (unsigned char *)malloc(size);
fread(data, 1, size, image);
/* verify valid JPEG header */
if(data[i] == 0xFF && data[i + 1] == 0xD8 && data[i + 2] == 0xFF && data[i + 3] == 0xE0) {
     i += 4;
     /* Check for null terminated JFIF */
     if(data[i + 2] == 'J' && data[i + 3] == 'F' && data[i + 4] == 'I' && data[i + 5] == 'F' && data[i + 6] == 0x00) {
         while(i < size) {
             i++;
             if(data[i] == 0xFF){
                 if(data[i+1] == 0xC0) {
                     height = data[i + 5]*256 + data[i + 6];
                     width = data[i + 7]*256 + data[i + 8];
                     break;
                 }
             }
         }
     }
 } 
 fclose(image);
于 2013-07-25T04:23:47.463 回答