CFC文件是腾讯最初的自定义表情文件包格式,后来又推出了EIP格式的自定义表情包,EIP实际上用的是POIFS,这个以后再试着解析了,还是先说说CFC吧。CFC其实很简单,所以,说不上“详解”,也就是随便解一下。
CFC格式简单到掉渣,没有文件头,也没有文件尾,由一系列块组成,一个块是一个自定义表情,块之间没有任何数据分隔,如此而已。这个文件用到的整数也都是little-endian格式的。CFC是什么简称?我不知道,可能是Custom Face Cab吧.
块
一个块有15个字段,如下
- md5的字符串形式长度,4个字节
- 快捷键长度,4字节
- 表情名称长度,4字节
- 表情文件名长度,4字节
- 表情文件长度,4字节
- 微缩图文件名长度,4字节
- 微缩文件长度,4字节
- 表情文件帧数,4字节
- 图片md5的字符串形式
- 快捷键
- 表情名称
- 表情文件名
- 微缩图文件名
- 表情文件内容
- 微缩图内容
稍微解释一下这15个字段
- md5是16字节,32个16进制数,所以长度一般都是0x00000020
- 快捷键知道是什么吧,这个长度是字节长度,1个汉字2个字节,不要忘记了
- 表情名称不是指文件名称,只是表情的名字而已,你在用QQ管理自定义表情的时候,会看到这个玩意,一般来说它都和快捷键相同,当然并不需要相同。感觉这个没什么用,即使QQ自己也很少用到这个玩意
- QQ里面用md5加上扩展名表示一个自定义表情,它支持gif格式,bmp格式和jpg格式,比较常见的是gif格式的自定义表情,所以这个长度一般是32 + 4
- 自定义表情文件的长度,没什么可解释的
- 你在用自定义表情的时候,可以浏览有哪些表情,就好像你用ACDSee时候那样。所以,这个是微缩图的文件名,QQ的处理方式是把自定义表情缩小到20x20大小,然后保存为bmp格式,同时文件名采用“md5 + fixed.bmp”的形式,所以这个字段一般是32 + 9。但是这只是QQ的做法,你可以用别的,LumaQQ对于微缩图也用gif格式
- 微缩图文件长度,没什么可解释的
- 表情文件帧数,自定义表情很多都是动画,动画自然就是多帧的。LumaQQ没管这个,感觉用不上
- QQ一般都是用的大写形式,LumaQQ也用的是大写
- 没什么可解释的
- 没什么可解释的
- 没什么可解释的
- 没什么可解释的
- 这里是真正的自定义表情数据了,你应该根据前面的长度,把这段数据保存为图像文件
- 嗯,微缩图的数据
可能是因为CFC太简单了,而且和腾讯的其他文件不协调,所以腾讯后来用了EIP的格式,EIP文件的格式和腾讯的其他文件格式是一致的,腾讯在POIFS基础上构建了自己的很多文件,要完全兼容他们,恐怕是个很艰苦的工作。
总结
这格式太简单,总结也就不废话了 |