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
上面是我找到的资料
就是下面这个图
47.jpg
(53.98 KB, 下载次数: 43)
下载附件
就是这个图
2011-05-27 18:03 上传
作者:
houtinghua
时间:
2012-11-27 15:31
我现在集中回复我以前发的SB帖子,我错了,我n年前太菜了,让大家见笑了
终于可以说点什么了
struct Size getjpgwh( char* strjpgpath )
{
//find last 0xFF0xC0 and jump 4byte
long llen,pos,i;
unsigned char* bs;
FILE *fp = fopen(strjpgpath,"r");
struct Size jpgsize;
short s=0;
char*p;
if(fp==NULL)
return jpgsize;
pos=0;
fseek(fp,0,SEEK_END);
llen= ftell(fp);//get File Length
bs = (char*)malloc( llen );
fseek(fp,0,SEEK_SET);
fread(bs,1,llen,fp);
for( i=0;i<llen-2;i++ )
if( bs[i]==0xFF &&bs[i+1]==0xC0 )
pos=i;
p=(char*)&jpgsize.h;
p[1]=bs[pos+5];
p[0]=bs[pos+6];
p=(char*)&jpgsize.w;
p[1]=bs[pos+7];
p[0]=bs[pos+8];
close(fp);
free(bs);
return jpgsize;
}
复制代码
作者:
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