编程实现QQ表情文件CFC格式

仙子亲亲你

仙子亲亲你

2016-01-29 12:29

编程实现QQ表情文件CFC格式,编程实现QQ表情文件CFC格式
 

背景:最近闲来无事,也应论坛某会员要求,想做个QQ表情下载的站点。本来事情是很简单的,写个小小的CRUD也就可以了,但嘻哈呵嘿既然是个.Net程序员,当然要使用.Net来实现了。今天我们就用.Net来实现CFC ( custom face cab? ) 的表情格式的打包功能。

要做到这个功能,我们必须先了解这个格式,首先Google一下。我们找到了这一篇来自清华大学的文章:FC文件格式详解

从这篇文章里我们得知了CFC的文件格式大概如下:

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com)

一个块有15个字段,如下

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com)

md5的字符串形式长度,4个字节
快捷键长度,4字节
表情名称长度,4字节
表情文件名长度,4字节
表情文件长度,4字节
微缩图文件名长度,4字节
微缩文件长度,4字节
表情文件帧数,4字节
图片md5的字符串形式
快捷键
表情名称
表情文件名
微缩图文件名
表情文件内容
微缩图内容
知道了格式就好办了,我们按步就班定义一个结构(struct)
 1    Struct#region Struct
 2    public struct FaceBlock
 3    {
 4        public uint MD5Length; //32
 5        public uint uintcutLength; //4
 6        public uint FaceNameLength; //4
 7        public uint FaceFileNameLength; //36 md5 + extension
 8        public uint FileLength;
 9        public uint ThumbnailFileNameLength; //41 md5 + fixed.bmp
10        public uint ThumbnailFileLength;
11        public uint FrameLength;
12        public string MD5;
13        public string uintcuts;
14        public string FaceName;
15        public string FaceFileName;
16        public string ThumbnailFileName;
17        public byte[] FaceData;
18        public byte[] ThumbnailData;
19
20        public static FaceBlock FromImage(string file)
21        {
22            return FaceHelper.GetFaceBlockFromImage(file);
23        }
24
25        byte[] GetBytes(uint value)
26        {
27            byte[] bt = BitConverter.GetBytes(value);
28            List<byte bytes = new List<byte();
29            bytes.AddRange(bt);
30            if (bytes.Count < 4)
31            {
32                int l = 4 - bytes.Count;[next]
33                for (int i = 0; i < l; i++)
34                    bytes.Add((byte)0);
35            }
36            return bytes.ToArray();
37        }
38
39        public byte[] ToBytes()
40        {
41            List<byte bytes = new List<byte();
42            Encoding

展开更多 50%)
分享

猜你喜欢

编程实现QQ表情文件CFC格式

电脑网络
编程实现QQ表情文件CFC格式

TCP/IP编程实现远程文件传输

编程语言 网络编程
TCP/IP编程实现远程文件传输

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

文件系统和不同格式文件转换编程

编程语言 网络编程
文件系统和不同格式文件转换编程

紧跟潮流:剖折QQ魔法表情实现原理

电脑网络
紧跟潮流:剖折QQ魔法表情实现原理

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

XML 编程思想:开放的办公文件格式

Web开发
XML 编程思想:开放的办公文件格式

QQ表情在QQ的那个文件夹里,我的表情存放在那

电脑入门
QQ表情在QQ的那个文件夹里,我的表情存放在那

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

使用 <multimap> 库创建重复键关联容器

使用 <multimap> 库创建重复键关联容器

《全民精灵》平民玩家体力药水获取攻略

《全民精灵》平民玩家体力药水获取攻略
下拉加载更多内容 ↓