Chinaunix

标题: 那位解析过jpg文件格式 谁知道宽高保存在那里。我google了 [打印本页]

作者: houtinghua    时间: 2011-05-27 18:04
标题: 那位解析过jpg文件格式 谁知道宽高保存在那里。我google了
那位解析过jpg文件格式   谁知道宽高保存在那里

我google了  都说在ffc0后3位,可我这里有个ps做的,后3位的宽高数据居然不对 ,但是acdsee打开却没有问题


(5)SOF(Start of Frame) 在基本系统中,只处理SOF0

标记结构       字节数    意义

0XFF             1

0XC0             1

Lf                  2            SOF标记码长度,不包括前两个字节0XFF,0XC0

P                   1            基本系统中,为0X08

Y                   2            图象高度

X                   2            图象宽度

Nf                 1            Frame中的成分个数,一般为1或3,1代表灰度图,3

上面是我找到的资料

就是下面这个图

作者: houtinghua    时间: 2012-11-27 15:31
我现在集中回复我以前发的SB帖子,我错了,我n年前太菜了,让大家见笑了



终于可以说点什么了
  1. struct Size getjpgwh( char* strjpgpath )
  2. {
  3.         //find last 0xFF0xC0 and jump 4byte  
  4.         long llen,pos,i;
  5.         unsigned char* bs;
  6.         FILE *fp = fopen(strjpgpath,"r");
  7.         struct Size jpgsize;
  8.         short s=0;
  9.         char*p;
  10.         if(fp==NULL)
  11.                 return jpgsize;
  12.         pos=0;
  13.         fseek(fp,0,SEEK_END);
  14.         llen= ftell(fp);//get File Length
  15.         bs = (char*)malloc( llen );
  16.         fseek(fp,0,SEEK_SET);
  17.         fread(bs,1,llen,fp);
  18.         for( i=0;i<llen-2;i++ )
  19.                 if( bs[i]==0xFF &&bs[i+1]==0xC0 )
  20.                         pos=i;

  21.         p=(char*)&jpgsize.h;
  22.         p[1]=bs[pos+5];
  23.         p[0]=bs[pos+6];
  24.         p=(char*)&jpgsize.w;
  25.         p[1]=bs[pos+7];
  26.         p[0]=bs[pos+8];

  27.         close(fp);
  28.         free(bs);
  29.         return jpgsize;
  30. }
复制代码

作者: nketc    时间: 2012-11-27 22:44
回复 2# houtinghua


    你这代码有待改进:
1)返回结构体
2)如果文件打开失败,返回值是啥意识?
3)从效率上考虑,没必要读取整个文件
4)你这代码运行过吗?混用fopen和close
。。。。。。。。。。。。。。。
作者: zighouse    时间: 2012-11-28 04:09
plz search into libjpeg source code.
作者: nketc    时间: 2012-11-28 08:32
补充:
5)lz你那个for循环,如果找到pos了,退出即可。
6)lz对jpeg格式理解不够。
作者: nketc    时间: 2012-11-28 08:39
最后由于对jpeg文件格式的理解问题,lz的程序对一些图片会得到错误的结果。
作者: houtinghua    时间: 2012-11-28 10:16

1效率确实有问题
2居然混用了fopen和close,看来是我错了
3jpg的来源是固定由公司另外一个工具生成的,。net的库,所以jpg格式固定,所以取错的可能性比较低,所以没有做错误处理




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2