精华内容
下载资源
问答
  • 笔者以前在网上看到有民间高手制作字体的相关事迹,觉得把自己的手写字用键盘敲出来是一件很有意思的事情,所以一直有时间想制作一套自己的手写体,前几天在网上搜索了一下制作字体的方法,发现技术上并不是太难,...

    一、背景

    笔者以前在网上看到有民间高手制作字体的相关事迹,觉得把自己的手写字用键盘敲出来是一件很有意思的事情,所以一直有时间想制作一套自己的手写体,前几天在网上搜索了一下制作字体的方法,发现技术上并不是太难,结合了自己PHP方面的开发经验,很快的做出了一套自己的手写字体。

    制作字体的流程大致是这样,首先我们需要确定那些字体需要自己写,确定了字体之后将这一批字利用工具做成一个模板,不过汉字的总量非常的多,搜索了一下大概在10万字左右,这个工程量太大,因此我们需要找出一批属于自己常用的字体(大概1700字左右),或者自己所常见到的字体,这个过程就需要用PHP来分析,分析出来之后再将其提取出来,做成模板。

    在这篇文章当中笔者将完整的记录制作字体过程,其中会将用到的PHP代码公布出来,方便其他读者使用,也给自己留个备份。

    二、操作概要

    1. 提取常用汉字
    2. 制作字体模板
    3. 生成字体文件

    三、提取常用汉字

    做一套字体的工作量是比较大的,因为汉字数量比较多,不过我们可以将我们常用的汉字提取出来,优先将这写汉字的做出来,后面不常用的字体空闲时再去累加,这里我们用到了PHP来辅助我们提取常用的汉字。

    3.1 收集数据

    在网络中有各种2000个常用汉字之类的doc文档,但是每个人所用到的却不一样;因此我们需要收集一批自己经常接触的字体数据,比如可以从自己的笔记、博客、聊天数据、通讯录中提取;比如笔者便将以往的笔记、文章、通讯录收集了起来,如下图则是笔者过往的文章列表

    image

    我们将文章内容复制到txt文件当中,然后保存到某一个文件夹当中,如下图所示

    image

    3.2 去除杂项

    收集了文章之后,里面有很多杂项,比如空格和换行,这些内容我们并不需要,如下图所示

    image

    此时可以通过正则表达式将不需要的内容删除,笔者使用的匹配非中文的正则表达式如下:

    [^\u4e00-\u9fa5]
    

    笔者平时开发习惯使用phpstorm这款IDE,因此这里教大家使用此IDE来删除非中文字符;按住键盘 ctrl+r,替换文本内容,然后将正则表达式放入查找项当中,并且勾选regex,此时所有非汉字内容会被选中,如下图所示:

    image

    当笔者点击Replace all按钮时,变删除了所有非中文字符,此时我们的内容应该只有一行内容,如下图所示

    image

    3.3 字体去重

    在整理好文字之后,我们现在需要对里面的内容进行去重,保证每一个汉字只保留一个,因为我们字体模板每个字只需要写一次就可以;因此可以使用PHP对汉字进行去重,代码如下所示

    <?php
    
    //汉字去重函数
    function mb_str_split(string $string)
    {
        return implode('', array_unique(preg_split('/(?<!^)(?!$)/u', $string)));
    }
    
    //将收集的汉字数据读取出来
    $word = file_get_contents('ziti/shoulu.txt');
    $word .= file_get_contents('ziti/phpsafe.txt');
    $word .= file_get_contents('ziti/reming.txt');
    $word .= file_get_contents('ziti/2000.txt');
    $word .= file_get_contents('ziti/https.txt');
    $word .= file_get_contents('ziti/wangwen/wuxian.txt');
    $word .= file_get_contents('ziti/wangwen/qixi.txt');
    $word .= file_get_contents('ziti/wangwen/qiantan.txt');
    $word .= file_get_contents('ziti/wangwen/jiaoyi.txt');
    
    //执行去重
    echo mb_str_split($word);
    

    当这段代码被执行之后,会返回去重后的结果,笔者执行结果如下图:

    image

    从图中可以看出,笔者已经得到了一批去重后的文字

    3.4 统计并排序

    去重之后已经得到了一批独一无二的汉字,但是字数实在太多,达到了1730个汉字,可能一下写不完,不过作为开发者当然是要讲究高效率的;所以可以通过PHP来进行优先级的计算,把最常用到字体排在前面,因此笔者需要写一段PHP代码。

    3.4.1 汉字拆分数组

    首先笔者将去重后的字符串拆分成数组,因为汉字比较特殊,所以需要自定义一段代码,参考代码如下:

    //把汉字拆分为数组
    function ch2arr(string $str)
    {
        $length = mb_strlen($str, 'utf-8');
        $array = [];
        for ($i = 0; $i < $length; $i++) {
            $array[] = mb_substr($str, $i, 1, 'utf-8');
        }
        return $array;
    }
    
    

    3.4.1 排序后筛选

    下载笔者需要通过foreach来遍历统计每个字出现的次数,并且安装倒序排序,如果limit大于0,还可以筛选重复次数大于0的汉字,代码如下

    function strSelect(string $string, string $word, $limit = 0)
    {
        //把字符串分割为数组
        $cnList = ch2arr($string);
        foreach ($cnList as $val) {
            $result[$val] = substr_count($word, $val);
        }
    
        //重复高的出现在最前
        arsort($result);
    
        //筛选字符串
        $ret = '';
        foreach ($result as $key => $val) {
            if ($val > $limit) {
    //            $ret .= "$key:$val".PHP_EOL;  //查看每个字重复的次数
                $ret .= $key;
            }
    
        }
    
        return $ret;
    }
    

    在前面两个方法写完之后,笔者只需要调用一行代码即可得出最常用的一些字符,也可以筛选结果,调用代码如下:

    echo strSelect($str, $allStr, 1);
    

    代码执行之后,笔者将会安装汉字出现的次数进行排序,把最常见的字符排在前面,并且筛选出现次数大于1的才返回,返回结果如下图所示:

    image

    从图中可以看到字体顺序已经发生了很大变化,数量明显少了很多。

    参考代码地址:

    http://tuchuang.songboy.site/ziti/code.txt
    

    四、制作字体模板

    把自己最常接触的汉字找出来之后,需要制作一套字体模板,这套字体模板的用处是让手写汉字后,顺利的找到对应的汉字,这里需要依靠第三方网站提供的一些功能。

    4.1 字体文件编码

    现在笔者将PHP计算的字符写入到一个txt文件当中,参考命令如下

    php quchong.php  > result.txt
    

    保存之后,还需要将它的编码设置为UTF-8;操作步骤为:首先用windows的记事本打开,然后将文件另存为UTF-8编码的文件,笔者用mac系统怎么也不行,使用windows很顺利的就完成了,建议使用windows,如下图所示

    image

    4.2 生成字体模板

    现在笔者需要将之前保存的汉字,用固定格式的模板展现出来,后期需要用此模板生成字体文件,这里需要用到一个网站来辅助,网站地址如下

    http://www.flexifont.com/
    

    网站需要注册,注册过程笔者这里将不做描述;在登陆之后点击我的字体,可以看到当前的字体模板,选择自定义,参考下图

    image

    点击自定义之后,笔者能看到一个上传txt文件的表单,如下图所示

    image

    上传完成之后,笔者回到列表当中,就可以看到刚才创建的字体模板,如下图所示

    image

    4.3 手写字体

    笔者将刚才创建的模板下载到电脑当中,并解压该文件,解压后的结果如下图所示

    image

    这里一定要打开这些图片确认无误,确认这些字和上传的字能对应的上,如果里面的字明显不是刚才上传的,很有可能是你上传文件的编码不正确,笔者生成的字体模板如下图所示

    image

    确认无误后需要将这几张图片打印下来,最好自己有打印机,笔者之前买过一款惠普的1121打印机,总价格不到200块钱,建议各位读者也买一个,有打印机有时候真的很方便;

    打印出来之后,就需要笔者将对应文字意义手写。

    五、生成字体文件

    手写字体是一个比较辛苦的过程,手写完成之后还有一些步骤,如果读者比较熟悉用手机编辑图片,那么这一步很快就能完成,如果不熟悉,就详细的看一下笔者的处理方法吧。

    5.1 拍照

    首先需要将刚才手写的文字进行拍照,拍照的时候注意尽量平着拍,需要把4个黑边拍进去;笔者使用的是iPhone手机,因此非常建议使用iPhone的读者将相机的网格线功能打开,因为这样就可以看出手机是否是平着拍的,在设置->相机->网格线,参考如下图

    image

    设置好之后,笔者再次打开相机,就能看到网格线,如下图所示

    image

    中间的十字架如果是黄颜色的,说明笔者当前是平着拍摄的,这样拍照的时候图片就不会那么斜了。

    5.2 处理图片

    虽然在拍照的时候已经很用心的去拍摄,但拍的过程当中难免有一些不满意,这个时候可以用手机简单处理一下,笔者这里依然以iPhone手机为例

    打开相册查看图片的右上方有一个编辑功能,如下图所示

    点击编辑之后,在左下角有一个方块按钮,点击之后可以对图片进行放大缩小的跳转,以及旋转,对齐等功能,读者可以自己去操作一番,将图片尽量调整到理想的状态。

    笔者处理后的效果如下图所示

    image

    5.3 上传并生成字体

    现在打开字体上传页面,把笔者已经处理过的图片上传到手写体网站当中了,URL地址如下

    http://www.flexifont.com/flexifont-chn/add_font/
    

    如下图所示,手写体站点的一些规则
    image

    需要记住别选择错模板(笔者一开始没选择对,还以为系统出问题了),然后把字体上传,上传完成之后,可以点击查看队列,看看当前的字体处理状态,URL地址如下

    http://www.flexifont.com/flexifont-chn/queuers/
    

    笔者上传字体后,不到1分钟便已经处理完成,处理完成之后,可以在我的字体下方看到字体列表,如下图所示

    image

    六、使用字体

    当字体生成完成之后,笔者安装字体文件即可

    6.1 安装字体

    安装字体在mac下和widnows下都非常简单,首先看看mac下安装方法,下载字体之后,可以直接双击字体文件,会看到如下图

    image

    笔者直接点击安装字体就可以了

    再说说windows下安装,其实也只需要双击字体文件即可,然后点击安装,如下图所示

    image

    不过笔者在电脑在安装字体的时候出现了错误,提示字体无效,于是我换了一种方式;右击鼠标->为所有用户安装 又好了,原因未知,如果读者出现这种情况也可以试试。

    6.2 在WPS中使用

    笔者很多时候都会使用到word文件,读者喜欢用wps,那么如何在WPS中使用“轻松体”呢,其实非常简单,在随便输入一些文字之后,在上方选择“轻松体”即可,效果如下图所示

    image

    如果发现某个字体不是你手写的风格,那应该是这个字体不再你的字体模板当中,你可以生成一个新的模板,然后合并之前的字体即可。

    6.3 补充

    在手写体当中默认的模板也不错,读者也可以去尝试一下,另外不仅仅汉字可以做手写体,符号也可以。


    作者:汤青松

    微信:songboy8888

    日期:2018年8月20号

    展开全文
  • 图标字体制作

    2020-05-28 10:43:48
    VUE项目中,移动端需要切2X或3X图片,来适应不同DPR的手机; 在webpack的构建中建议使用单张图,因为UIloader会帮我们做图片打包; 通常会把单一简单的图标类的...图标字体制作的方法: 1 2 3 4 5 ...

    VUE项目中,移动端需要切2X或3X图片,来适应不同DPR的手机;

    在webpack的构建中建议使用单张图,因为UIloader会帮我们做图片打包;

    通常会把单一简单的图标类的图片做成SVG(矢量图:放大或者缩小不会影响图片的质量),然后svg图片转化为图标字体,而不是直接使用;

    图标字体制作的方法:

    1

    2

    3

    4

    5

    展开全文
  • BMFont制作美术字体

    千次阅读 2016-06-02 18:33:45
    生成 Number.fnt、Number_0.png 两个文件,将其拖入Unity 相应位置,继续下一步 箭头所指就是我们要得到的最终目标,在文本处字体使用它就可以了。
















    生成 Number.fnt、Number_0.png 两个文件,将其拖入Unity 相应位置,继续下一步











    箭头所指就是我们要得到的最终目标,在文本处字体使用它就可以了。


    在使用 Tools -> BMFont Maker 之前得先完成以下步骤:

    using UnityEngine;
    using UnityEditor;
    
    public class BMFontEditor : EditorWindow
    {
        [MenuItem("Tools/BMFont Maker")]
        static public void OpenBMFontMaker()
        {
            EditorWindow.GetWindow<BMFontEditor>(false, "BMFont Maker", true).Show();
        }
    
        [SerializeField]
        private Font targetFont;
    
        [SerializeField]
        private TextAsset fntData;
    
        [SerializeField]
        private Material fontMaterial;
    
        [SerializeField]
        private Texture2D fontTexture;
    
        private BMFont bmFont = new BMFont();
    
        public BMFontEditor()
        {
        }
    
        void OnGUI()
        {
            targetFont = EditorGUILayout.ObjectField("Target Font", targetFont, typeof(Font), false) as Font;
            fntData = EditorGUILayout.ObjectField("Fnt Data", fntData, typeof(TextAsset), false) as TextAsset;
            fontMaterial = EditorGUILayout.ObjectField("Font Material", fontMaterial, typeof(Material), false) as Material;
            fontTexture = EditorGUILayout.ObjectField("Font Texture", fontTexture, typeof(Texture2D), false) as Texture2D;
    
            if (GUILayout.Button("Create BMFont"))
            {
                BMFontReader.Load(bmFont, fntData.name, fntData.bytes); //借用NGUI封装的读取类
                CharacterInfo[] characterInfo = new CharacterInfo[bmFont.glyphs.Count];
                for (int i = 0; i < bmFont.glyphs.Count; i++)
                {
                    BMGlyph bmInfo = bmFont.glyphs[i];
                    CharacterInfo info = new CharacterInfo();
                    info.index = bmInfo.index;
                    info.uv.x = (float)bmInfo.x / (float)bmFont.texWidth;
                    info.uv.y = 1 - (float)bmInfo.y / (float)bmFont.texHeight;
                    info.uv.width = (float)bmInfo.width / (float)bmFont.texWidth;
                    info.uv.height = -1f * (float)bmInfo.height / (float)bmFont.texHeight;
                    info.vert.x = 0;
                    info.vert.y = -(float)bmInfo.height;
                    info.vert.width = (float)bmInfo.width;
                    info.vert.height = (float)bmInfo.height;
                    info.width = (float)bmInfo.advance;
                    characterInfo[i] = info;
                }
                targetFont.characterInfo = characterInfo;
                if (fontMaterial)
                {
                    fontMaterial.mainTexture = fontTexture;
                }
                targetFont.material = fontMaterial;
                fontMaterial.shader = Shader.Find("UI/Default");//这一行很关键,如果用standard的shader,放到Android手机上,第一次加载会很慢
    
                Debug.Log("Create Font <" + targetFont.name + "> Success");
                Close();
            }
        }
    }
    
    将这个类放入工程中,这样在 Tools 中才可以找到 BMFont Maker,它的作用是赋予字体的详细信息,由于它是借助 NGUI 来实现的工具,所以得加上 NGUI 中的以下类:



    展开全文
  • 好吧~似乎这个问题困扰了很多人,游戏开始中文化是个不错的事儿啊,这里我就做下说明,如何制作中文字体图集~ 这里的字库图集的制作更多的是为了服务于unity的UI插件NGUI吧,当然EZ活着其他的可能也能用吧。 ...

    http://momowing.diandian.com/post/2013-01-24/40046239211


    好吧~似乎这个问题困扰了很多人,游戏开始中文化是个不错的事儿啊,这里我就做下说明,如何制作中文字体图集~

    这里的字库图集的制作更多的是为了服务于unity的UI插件NGUI吧,当然EZ活着其他的可能也能用吧。

    首先是准备bmfont这款软件,大家可以去官方下载http://www.angelcode.com/products/bmfont/,当然我也给出一个快盘的下载地址,版本是1.13的:http://www.kuaipan.cn/file/id_12421281643248522.htm

    打开这款软件,进行字体的选择:


    这里有几个注意点,

    1.font下拉窗我们可以选择自己喜欢的中文字体,当然您也可以下载第三方的ttf字体通过Add font file这个导入。

    2.字体编码,着这里默认是unicode,这里是个注意点,之后我会讲到。

     

    接着设置字体的导出选项:


    这里有几个注意点:

    1.Width和Height的值,4096可以说是最大了,请不要超过这个值,不然做出来的图集太大,会加大drawcall的数量哦~

    2.bit depth,这里我用的是8位很多人可能觉得不清晰,是可以选择32位的,不过同样会增大负担。

    以上所说的负担都是针对手机的哈。

     

    现在我们选择自己需要的字体:


    需要的您都选中吧~当然也可以全选,但是中国文字真的好多啊,全选估计一张图集都装不下,所以怎么办?挑选我们要用的字呗~生僻字就不要了。

    事实上第一次我真的选了,花了我2小时?可能3小时左右吧~这里我之前请教“坤叔”,他教了我一个比较狠的方法,突然觉得自己真tmd二逼。

     

    在桌面创建一个txt文本,在里面输入自己想要的文字,可以上网下找一下中文常用字把它粘贴下来。


     

     


     

    看一下文本属性:



    它的编码格式是中文的哦~GB2312,不知道大家联想到了什么没有。

     

    然后保存,现在回到bmfont:



    现在找到我们的文本!!!!!!!!!!!!!!!

    选择后发现:


    这种错误,为什么?因为bmfont设置的编码格式和我们文本的编码格式不统一!

     

    现在我们统一一下编码就好啦,我这里用的是notepad++


    保存一下,重复上面的操作试试~

    需要的字都被选中了~


     

    现在保存出NGUI需要的东西:


     

    得到两个文件:


     

    事实上我这里用不到这么大的图集,可以看出来一大块黑色,这些都浪费了,我们可以回到bm里面把宽高缩小一下,我就128吧~


    好像还是太大,无所谓了,我就是说明一下,大家要节约呀~哈哈。

    接着把fnt后缀的文件重命名为txt。


    打工告成!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

     

    如何使用?可以参看我的另外一篇博客:

    http://momowing.diandian.com/post/2013-01-07/40046082451

    展开全文
  • 【逐浪字库(在线做字)-字体大师】是个帮你设计个人字体的应用。 【PC端】: 功能很强大,只要你在电脑上打开网址:https://v.ziti163.com/ 就可以进入操作状态,有什么不明白的地方还可以点击右边的客服...
  • 制作手机网站时,文字大小设置使用px多有不便,可以使用rem设置字体大小 先设置 html { font-size:312.5%; } 正常网页字体是1rem=16px; 这样设置后 1rem = 50px; 想写12px时,12/50=0.24rem psd设计稿一般是750px; ...
  • 今天分享ps烫金效果教程:ps制作烫金凹陷字体,这类凹版烫金效果在生活中很常见,特别在印刷设计,有粉丝问怎么用PS做出来,今天就来一发ps烫金效果教程:ps制作烫金凹陷字体,难度不大,主要是图层样式的应用,素材...
  • 好吧~似乎这个问题困扰了很多人,游戏开始中文化是个不错的事儿啊,这里我就做下说明,如何制作中文字体图集~ 这里的字库图集的制作更多的是为了服务于unity的UI插件NGUI吧,当然EZ活着其他的可能也能用吧。 ...
  • BMFont中文字体图集制作的方法

    千次阅读 2013-10-29 21:38:44
    BMFont中文字体图集制作的方法~(for unity ngui) 好吧~似乎这个问题困扰了很多人,游戏开始中文化是个不错的事儿啊,这里我就做下说明,如何制作中文字体图集~ 这里的字库图集的制作更多的是为了服务于unity的UI...
  • 一款自己写的字体 - 沐目体

    千次阅读 2018-11-05 17:12:55
    使用手机造字 app 手写制作,写了大概 1 年半吧,终于写完了,写完看效果发现粗细细了点,字型也小了点,只好以后有时间再改罗。基本上还是挺满意的,下面是效果图。 详情见https://lruihao.cn/font-mmt.html ...
  • 使用BMFont制作NGUI用的中文字体

    千次阅读 2014-01-04 12:32:32
    好吧~似乎这个问题困扰了很多人,游戏开始中文化是个不错的事儿啊,这里我就做下说明,如何制作中文字体图集~ 这里的字库图集的制作更多的是为了服务于unity的UI插件NGUI吧,当然EZ或者其他的可能也能用吧。
  • html通过自适应制作手机端音乐播放器
  • 作为前端设计工程师使用font awesome 是十分频繁的,而“png图”样式图标现在已经应用的比较少了,追溯其原因还是浏览器内核的渲染速度提升和字体库多浏览器(包括手机)的支持,矢量字体不会出现模糊的情况等等。...
  • HTML制作手机邮箱界面

    2020-03-15 23:24:04
    主要是通过fontawesome字体图标来实现。整个有页面分为6个部分,每一部分定义一栏信息,其中包括字体图标,文字以及右边的消息数量。消息数量主要是通过设置span元素的圆角来实现的。 <!DOCTYPE html> <...
  • <title>html使用阿里图标库(iconfont)制作字体图标 .myicon{ font-size: 16px; margin-right:10px; color:#777; } ul{width:50%;border:1px solid #ccc;padding:10px;text-align:center;} ul li{list...
  • 最近制作手机端页面时候发现一个问题,当你页面上的文字,大于某个指定的值后,字体的大小几乎会增大一倍 处理方案:增加css样式* { max-height: 999999px; }
  • BMFont中文字体图集制作的方法~(for unity ngui) 好吧~似乎这个问题困扰了很多人,游戏开始中文化是个不错的事儿啊,这里我就做下说明,如何制作中文字体图集~ 这里的字库图集的制作更多的是为了服务于...
  • 不懂技术,怎样制作手机电子书?

    千次阅读 2013-06-17 15:29:49
    随着手机功能的越来越强大,很多用户开始习惯于使用手机电子书阅读器。然而我们经常会遇到在网上下载的txt文件,在电脑上...如何解决这个问题,方法是将text文本转制作手机电子书应用,下载到智能手机就能直接使用。
  • 手机免费logo在线制作专业教程?不知道大家在日常工作或者是生活中会不会经常需要制作logo,那么有一个在手机上完成logo在线制作的好方法,不知道小伙伴们要不要学习呢?如果需要,那么跟着小编往下看吧。 1:打开...
  • 手机web网站制作策划

    千次阅读 2013-08-11 19:58:26
    如何建立一个好的手机网站,如何使网站结构清晰合理、内容准确详实、页面生动鲜明,如何保证自己的网站能够在茫茫的网络世界脱颖而出,我们认为完整的网站建设策划方案是建设手机网站之前必须要考虑的问题,我们将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,556
精华内容 6,622
关键字:

如何自己制作手机字体