Skip to content

muruoxi2018/Check_Font_Copyright

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

查字体版权,免法律纠纷

如你所见,我是一名设计爱好者,这是我用屁股想的说明文档,因此如果发现阅读起来狗屁不通,属于正常情况。

在前些年我看到了好多起因为各种版权产生了法律纠纷的事件。

比如视觉中国版权门事件。

再比如很多设计师甚至不知道微软雅黑字体居然不能用来商用。

近年来这类事件屡见不鲜。

在我之前,有“360查字体”这个网站,遗憾的是,它看起来已经不再维护了。

这令人有点儿伤心。

因此我在闲暇时间制作了这个网站,我希望他能帮我们简单的排查出字体方面的隐患,降低一些不必要的版权纠纷。

好吧,虽然我觉得一个好的设计师,肯定会知道哪些字体可以被用作商业设计。

图1

原理

在前端,你没法直接读取电脑上已经安装的字体列表,这是一个权限安全的问题。

因此需要借助一个取巧的方式,通过 CSS 来搞定它。

function CheckFont(t) {
    if (t == "") { return "" };
    var f = "他们给我说这个东西越长就越精准我特别想试试ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrsyuvwxyz1234567890";
    var s = document.createElement("span");
    s.style.fontSize = '72px';
    s.innerHTML = f;
    var b = document.getElementsByTagName("body")[0];
    b.appendChild(s);
    s.style.fontFamily = f;
    var w = s.offsetWidth;
    var h = s.offsetHeight;
    s.style.fontFamily = t + ',' + f;
    var r = ((s.offsetWidth != w) || (s.offsetHeight != h));
    b.removeChild(s);
    return r ? true : false;
}

如你所见,创建一个元素,假如当前电脑不存在这个字体,则它的offsetWidthoffsetHeight会和字体存在时的值不同。

理论上来说,只要我的元素足够大,内容足够多,就可以判断出一个字体是否存在。

虽然我上面的代码是JavaScript,然而它其实是通过CSS中的offsetWidthoffsetHeight去判断的。

因此只要你理解了前端样式中的offsetWidthoffsetHeight,你就能很简单的读懂这段代码。

缺点

一个很大的缺点,在于对人力的消耗上。

我必须知道字体的名字,然后再去找这个字体的出处,以便确认它到底能不能用来商用。

我低估了它的工作量,尽管我已经很努力的填充字体。

我太难了。

尽管我写了一些用来辅助我的软件。

图2

万幸,我会的程序开发语言很多,虽然我没有任何精通的语言。

不过因此我会把一些小工具的源码也传到这个仓库里,因此你可能会看到各种语言所写。

不要慌,如果你想接手我这个项目,你只需要对以下知识略有了解就行。

开发

语言 构件 是否必须 说明
html5 UI 用户界面,提供字体版权鉴定、字体查询、字体下载、字体提交等功能。
html5 Layui @贤心开发的前端脚手架,因为我是前端菜鸟,它能让我省下去写各种尺寸的客户端的兼容问题,感谢@贤心
SQLite SQL 我选择了SQLlite,这样我就不用天天把MySQL开在后台来做开发了。当然如果你需要的话,可以使用MySQL或者其他数据库,在conf.php里配置一下第7行的数组即可。就目前而言,我开发的功能里,你应该不需要修改其它内容。对了,别忘了把表fonts.sqlite3的结构导入你的新数据库。
php API 为了方便更新字体列表,我用php写了后端,包括字体上传等接口。
php xiunoPHP 出于安全起见,我调用了老黄开发的xiunoPHP,他的另一个作品xiunoBBS也是基于此开发的,安全性非常高。当然安全这个问题,还是和开发者有关,我很菜,所以我不保证我写的代码没有被脱裤或者其他安全隐患。
c# 字体入库工具 按我的设想,用户从前端提交过来的字体,应该由我再确定一遍安全性和字体的准确性,而不会直接出现在字体列表。因此我在数据库里设置了一个verify字段,用来判断是否经过了审核。然而这个字段在我自己录入字体的时候很麻烦。另外,也因为我要确定字体的fontFamily,以便它能被正确识别为是否安装。所以我用C#写了这个小工具。

致谢

感谢@梦浪的小虾米,他教了我三天php,让我能写这个程序。

感谢@Nt!M4XEUR$,他在Web安全方面给了我很多指导。

感谢@山顶的一棵草,教我写C#。

感谢@电脑发烧友,帮我调Bug。

感谢@贤心开发了LayUI,让前端菜鸟也能写前端了。

感谢@老黄开发了xiunoPHP和xiunoBBS,让我可以复制粘贴。

感谢@只为设计,让我对设计有兴趣。

感谢@我的沙雕群友们,每天催我更新,更,更,更,不知道我是鸽子精么!