手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

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

来源:互联网 作者:west263.com 时间:2008-02-22
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

fb.uintcuts = uintcuts;
fb.uintcutLength = (uint)uintcuts.Length;
fb.FaceName = uintcuts;
fb.FaceNameLength = (uint)uintcuts.Length;
fb.FaceFileName = fileName;
fb.FaceFileNameLength = (uint)fileName.Length;
fb.ThumbnailFileName = thumbnailName;
fb.ThumbnailFileNameLength = (uint)thumbnailName.Length;
fb.FaceData = File.ReadAllBytes(file);
fb.FileLength = (uint)fb.FaceData.Length;
fb.ThumbnailData = thumbnailData;
fb.ThumbnailFileLength = (uint)thumbnailData.Length;
fb.FrameLength = (uint)frameCount;

return fb;
}

Helper#region Helper
//随机方法
internal static string RandomNum(int n) //
{
string strchar = "0,1,2,3,4,5,6,7,8,9";
string[] VcArray = strchar.Split(',');
string VNum = "";//由于字符串很短,F77pclw,c络G|?,业,e'b就不用StringBuilder了
int temp = -1; //记录上次随机数值,尽量避免产生几个一样的随机数
//采用一个简单的算法以保证生成随机数的不同
Random rand = new Random();
for (int i = 1; i < n 1; i )
{
if (temp != -1)
{
rand = new Random(i * temp * unchecked((int)

DateTime.Now.Ticks));
}
//int t = rand.Next(35) ;
int t = rand.Next(10);
if (temp != -1 && temp == t)
{
return RandomNum(n);
}
temp = t;
VNum = VcArray[t];
}
return VNum;//返回生成的随机数
}

//从文件名获得MD5
internal static string GetMD5(FileStream fs)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] md5byte = md5.ComputeHash(fs);
string str = string.Empty;
int i, j;
foreach (byte b in md5byte)
{
i = Convert.ToInt32(b);
j = i >> 4;
str = (Convert.ToString(j, 16));
j = ((i << 4) & 0x00ff) >> 4;
str = (Convert.ToString(j, 16));
}

return str.ToUpper();
}
#endregion

//从一个目录生成一个CFC文件集合
public static void
BuildCFCFileFromDirectory(string directory)
{
List<byte> bytes = new List<byte>();
foreach (string file in Directory.GetFiles(directory))
{
if (!IsImageFile(file))
continue;

bytes.AddRange(FaceBlock.FromImage(file).ToBytes());
}

string fName = Path.Combine(directory, Path.GetDirectoryName(directory) ".cfc");
FileStream fs = File.Create(fName);
fs.Write(bytes.ToArray(), 0, bytes.Count);
fs.Close();
}

//判断是否为图像文件,方法比较简陋。
private static bool IsImageFile(string file)
{
List<string> validExt = new List<string>(new string[]{
".bmp",
".jpg",
".jpeg",
".gif",
".png",
});

return validExt.Contains(Path.GetExtension(file).ToLower());
}
}
好,有了上面的方法,我们就可以调用了。
调用方法实在是有些简单。

FaceHelper.BuildCFCFileFromDirectory(Server.MapPath("~/img/"));
这样就OK了,现在去你的网站根目录下看看,有没有一个img.cfc的文件呢?再双击一下,是不是将img目录下的文件全部导入到QQ表情里了呢? enjoy coding!

本文原发:无垠IT教学网
http://www.cnblogs.com/skyover/archive/2006/10/03/520581.html

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!