icon图标批量生成 css 样式文件工具

来源:互联网 发布:java线程的生命周期 编辑:程序博客网 时间:2024/05/17 02:10

工欲善其事必先利其器,最近在使用ExtJS、EasyUI框架时,经常需要用到一些png图标,从网上收集了将近2000个图标,但还需要生成 css 样式文件, 一个一个写的话太不现实,于是写个小工具生成吧。

我先把图标资源放出来:http://download.csdn.net/detail/xz2001/5387797

代码都很简单,遍历所有图标,直接生成css文件就行了,直接上代码了:

1 FileName 类

此类用于格式化现有的文件名,以保持文件名和生成的样式class名称风格统一。

    public static class FileName    {        private static Dictionary<string, string> Renames = new Dictionary<string, string>();//保存重命名的字符配置,去除些太长的名字        static FileName()        {//这里可以根据自己的需要随意加            Renames.Clear();            Renames.Add("application", "app");            Renames.Add("addresses", "address");            Renames.Add("previous", "prev");            Renames.Add("horizontal", "hor");            Renames.Add("vertical", "ver");            Renames.Add("anticlockwise", "reversed");            Renames.Add("extension", "ext");            Renames.Add("organisation", "organic");            Renames.Add("fastforward", "fast");        }        public static string FormatName(string name)//格式化文件名        {            int index = name.LastIndexOf('.');            string ext = name.Substring(name.LastIndexOf('.'));            name = name.Substring(0, index);            RegexOptions RegexOptions = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase);            Regex regex = new Regex(@"[\.\- _]+", RegexOptions);//把原始的文件名中,把英文点、减号、空格和下划线分隔全部替换成减号            name = regex.Replace(name, "-");            return Hump(name) + ext;        }        public static string Hump(string name)        {            var parts = name.Split('-');//以减号拆分成数组,分别处理每一段            for (var i = 0; i < parts.Length; i++)            {                parts[i] = Word(parts[i]);            }            return String.Join("-", parts);//使用减号重新连接处理后的每一段        }        public static string Word(string part)//处理每一个word        {            if (string.IsNullOrEmpty(part))                return null;            part = part.ToLower();            // 简化文件名,如果需要把下面2行注释去掉            //if (Renames.ContainsKey(part))            //    part = Renames[part];            if (part.Length == 1)                return part.ToLower();            return part.Substring(0, 1).ToLower() + part.Substring(1).ToLower();//如果喜欢驼峰命名法,可以在这处理,把第一个字符转换成大写即可        }    }

2 Form窗体中的主要处理方法

所有代码请参考源码,这个只是button的处理方法代码:

        private void button2_Click(object sender, EventArgs e)        {            textBox1.Text = textBox1.Text.Trim();            if (!System.IO.Directory.Exists(textBox1.Text))//textBox1里应该是选择一个目录位置,里面全是图标文件,在这要判断下这个目录是否存在            {                MessageBox.Show("请选择目录!");                return;            }            label2.Text = "loading...";            textBox1.ReadOnly = true;            var dir = new DirectoryInfo(textBox1.Text);            var files = dir.GetFiles("*.png");//搜索所有.png文件            progressBar1.Maximum = files.Length * 2;//设置进度条为文件数*2,第一次遍历修改文件名,第二次生成css            string newPath;            string tempName;            int count = 0;            int err = 0;            int maxLen = 0;            richTextBox1.Text += "准备格式化文件名...";            foreach (var file in files)//格式化文件名            {                count++;                label2.Text = "格式化第" + count + "个文件:" + file.Name;                progressBar1.Value = count;                tempName = FileName.FormatName(file.Name);//调用静态类的格式化方法                newPath = textBox1.Text + "\\" + tempName;                if (maxLen < tempName.Length)                    maxLen = tempName.Length;                try                {                    File.Move(file.FullName, newPath);                }                catch                {                    richTextBox1.Text += "\n 文件名重复:" + file.Name;                    err++;                }            }            // 生成css            richTextBox1.Text += "\n 准备创建css文件...";            StringBuilder sb = new StringBuilder(100);            sb.Append("/* 来自 calvin 的自动生成工具,QQ:54335020 */\r\n");//生成css文件内容            foreach (var file in files)            {                count++;                label2.Text = "生成第" + count + "个文件:" + file.Name;                progressBar1.Value = count;                tempName = file.Name.Substring(0, file.Name.LastIndexOf('.'));                sb.Append(".ic-" + tempName.PadRight(maxLen + 1) + "{ background:url('icons/" + tempName + ".png') no-repeat center center; }\r\n");    //easyui 样式                //sb.Append(".ic-" + tempName.PadRight(maxLen + 1) + "{ background-image:url(../icons/" + tempName + ".png)!important; }\r\n");         //extjs 样式            }            File.WriteAllText(textBox1.Text + "\\style.css", sb.ToString());//向ID文件中写入,文件名是style.css,放在图标目录里            richTextBox1.Text += "\n css文件生成完成";            label2.Text = "处理完成";            textBox1.ReadOnly = false;        }

没啥可讲的,很简单的工具,放个链接:http://download.csdn.net/detail/xz2001/5387935