如何实现webfont自定义字体方案

对于做Web前端的人来说,现在不知道webfont为何物似乎显得有点low了。webfont固然可爱,但似乎仍只可远观,不可亵玩。原因就在于中文字体库体积庞大,远比26个字母来的复杂。于是有同学就说了,为何不制作一个精简的字库,按需订制就可以了。正解,下面的就介绍下制作方法:
      工具:提供font字体的网站(比如:http://sampler.linotype.com/sam/sam?ID=1390633&text=狠&sizex=4000&sizey=4000&fontsize=3000,ID对应字体,text对应字,其它定义字体大小),fontforge字体编辑器,wget下载工具,PHP运行环境。
      1、首先确认你需要哪些字,将这些字依次填入txt文档中,并以utf8格式保存;
      2、下载安装wget工具、PHP运行环境。在cmd下运行php文件,根据txt文件中的字自动下载字体图片,并以中文unicode给图片命名,保存在指定文件夹。
  1. $file_path = "fan.txt";//txt格式默认用utf8格式,否则转换
  2. $str=file_get_contents($file_path);
  3. $encode= mb_detect_encoding($str, array('GB2312','GBK','UTF-8'),true);
  4. if($encode=="GB2312")
  5. {
  6.     $str = iconv("GB2312","UTF-8",$str);
  7. }
  8. else if($encode=="GBK")
  9. {
  10.     $str = iconv("GBK","UTF-8",$str);
  11. }
  12. else if($encode=="EUC-CN")
  13. {
  14.     $str = iconv("GBK","UTF-8",$str);
  15. }
  16. else//CP936
  17. {
  18.     //$str = iconv("GB2312","UTF-8",$str);
  19.     $str = mb_convert_encoding($str, 'UTF-8', 'GBK');//把GBK编码转化为 UTF-8编码seo  
  20. }
  21. $arr=array();
  22. for($i=0;$i<mb_strlen($str,'utf8');$i++){
  23.     $arr[$i]=mb_substr($str,$i,1,'utf8');
  24.     }
  25. $imgpath = './08/';//图片保存的文件夹
  26. foreach($arr as $key=>$value){
  27.     $code=unicode_encode($value);
  28.     if(file_exists($imgpath.$code.'.png')){
  29.             echo $imgpath.$mycode.'.png is already exist';continue;
  30.         }
  31.     $value=urlencode($value);
  32.     $url="http://sampler.linotype.com/sam/sam?ID=1390633^&text=".$value."^&sizex=4000^&sizey=4000^&fontsize=3000";
  33.     $command="d:/wget/wget -T 25 -t 0 -O ".$imgpath.$code.".png ".$url;//d:/wget为wget的执行文件路径
  34. exec($command);
  35.     }
  36. //将内容进行UNICODE编码,编码后的内容格式:56fe  
  37. function unicode_encode($name)  
  38. {  
  39.     $name = iconv('UTF-8', 'UCS-2', $name);  
  40.     $len = strlen($name);  
  41.     $str = '';  
  42.     for ($i = 0; $i < $len - 1; $i = $i + 2)  
  43.     {  
  44.         $c = $name[$i];  
  45.         $c2 = $name[$i + 1];  
  46.         if (ord($c) > 0)  
  47.         {    // 两个字节的文字  
  48.             $c=base_convert(ord($c), 10, 16);
  49.             $c2=base_convert(ord($c2), 10, 16);
  50.             if(strlen($c)<2)$c="0".$c;
  51.             if(strlen($c2)<2)$c2="0".$c2;
  52.             $str .=$c.$c2;   
  53.         }  
  54.         else  
  55.         {  
  56.             $str .= $c2;  
  57.         }  
  58.     }  
  59.     return $str;  
  60. }
复制代码
3、安装fontforge,该软件支持python,运行python脚本自动导入指定目录下的字体图片(根据文件名对应汉字),然后导出生成字体文件,该文件即为简化后的字体库。此python脚本一次导入50张图,字数多的需要多次导入。
  1. import os,fontforge;
  2. imgsPath = "D:/phpstudy/www/img";
  3. imgs = os.listdir(imgsPath);
  4. font = fontforge.activeFont();
  5. i = 0;
  6. for index in xrange(len(imgs)):
  7. fontforge.logWarning("index:"+str(index));imgName = imgs[index][:-4];fontforge.logWarning("imgName:"+imgName)
  8. glyph=font.createChar(int(imgName,16),"uni"+imgName);
  9. layer=glyph.foreground;
  10. if layer.isEmpty():
  11.    try:        
  12.                  glyph.importOutlines(imgsPath+"/"+imgs[index]);
  13.    except:  
  14.                  fontforge.logWarning(str(index)+"/"+str(len(imgs))+":"+imgsPath+"/"+imgs[index]+"is error");
  15.                  continue;
  16.    else:
  17.                  glyph.autoTrace();glyph.simplify();glyph.activeLayer=0;glyph.clear();i=i+1;
  18.                  fontforge.logWarning(str(index)+"/"+str(len(imgs))+":"+imgsPath+"/"+imgs[index]+"is OK"+str(i))
  19.                  if i==50:
  20.                     break;
  21. else:
  22.                  continue;
    将windows7( vista )默认字体“微软雅黑”修改为XP“标准宋体”的方法:
    1、把XP系统的“Windows\Fonts”文件夹里面的“simsun.ttc”文件,复制到win7 ( vista )系统的“Windows

\Fonts”文件夹里,此时,该文件会自动重命名为“simsun_0.ttc”.
    (可以借助U盘或移动硬盘等其他工具或方法,来完成以上步骤)2、打开“注册表编辑器”,按此路径依次打开以

下文件夹:
    “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts”.
    (打开注册表编辑器的方法:“开始”菜单中“所有程序”,打开“附件”中的“运行”→“打开栏”中输

入“regedit”→单击确定即可)3、在“Fonts”文件夹里面,找到以下两个文件,然后把二者默认的键值修改

为“simsun_0.ttc”:
    “Microsoft YaHei msyh.ttf”; 原来是:msyh.ttf“Microsoft YaHei Bold msyhbd.ttf”. 原来是:

msyhbd.ttf4、注销或者重新启动计算机即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值