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

25 篇文章 0 订阅
12 篇文章 0 订阅

工欲善其事必先利其器,最近在使用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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值