欢迎光临散文网 会员登陆 & 注册

自制彩色字体Zsye发布・绘文字的隐藏技

2021-06-13 21:07 作者:綿雲飴里  | 我要投稿

“Zsye”是一个 ISO 15924 四字代码,指符号(symbol)的彩色(绘文字,emoji)变体。

www.unicode.org/iso15924/iso15924-codes.html


动机

绘文字,虽然看起来像图片,但也是文字,它有可以被机器识别的语义,可以在一些不能发图的地方传播、节省流量,可以被ctrl+F搜索,这是表情图所不能代替的。

这个完全原创的字体不算新,去年6月之前就在用,用了快一年了。制作动机是,在用的视窗系统比较古老、彩色字体不好看,迫切需要显示某些b站常见彩色绘文字,

如:

我看到的是这个效果,截屏于2020-6-9

一些感慨:

不是⭐U+2B50 WHITE MEDIUM STAR,是☆U+2606 WHITE STAR 啊,2020-12-13

一些美好的祝❤️愿:

非常に蚌埠住です,2020-11-9

光b站,像桃饱网还老喜欢用👉👈这对符号:

和上图同一评论区,2020-11-9

要区分b站一个心形表情图(有必要吗?图片不便传播,连b站专栏都不能插入文中使用。如果是也嫌系统绘文字字体不好看,就学推特自定义啊,技术上又不难)

《如何让帆船逆风航行?》第一个是绘文字,第二个是表情图——咦怎么还有锯齿,2020-6-26

后还有一个技术问题。统一码规定某些字符形状完全一致🔴🔵🟠🟡🟢🟣🟤⚪⚫,只有颜色区别🟥🟦🟧🟨🟩🟪🟫⬜⬛,某些场合我需要区分它们。

加之系统字体老旧不能显示所有彩色心,💙因💚此💛做🧡了❤这💜个🤎字🖤体🤍


设计

统一码有些历史上的妥协。比如这个❤️,你看见是红色的,但其实它是:

U+2764 HEAVY BLACK HEART “粗黑心”

名称其实没错,本来❤在各种非彩色字体里都是黑心。但到了彩色字体时期,统一码需要找补,于是:

[先于绘文字收录的符号名称之White/Black一般译作 空心/实心 而非 白/黑](unicode.org/reports/tr51/#Names)

并启用了变体选择符(U+FE00~FE0F Variation Selectors,简称VS,不可见字符,设计上是故意显示不出来的,原则上即便有字形也不会显示)其中,

VS15 U+FE0E指定前一个符号表现为单色(text style,使用例:❤︎)

VS16 U+FE0F指定前一个符号表现为彩色(emoji style,使用例:❤️)

注意这只是指定,如果渲染的软件\应用不理会、字体不支持也没办法。“Zsye”就不支持VS15,不过我全都指定了后备单色字形,在不支持彩色字体的软件里会显示为对应的区分用单色字形,可以用🟥🟦🟧🟨🟩🟪🟫⬜⬛试一试。

这种名实不符的情况还有。除了⭐️中号空心星,为了区分下列这些,我也单独做了彩字:

✖️ 看起来是个叉,其实是 U+2716 HEAVY MULTIPLICATION X “粗X形乘号”,和➕️加➖️减➗️除 一样不做成红色,经常被误用。

❌️ U+274C CROSS MARK “叉号”,一般做成大红叉。对应的是✔️ U+2714 HEAVY CHECK MARK “粗勾选标记”。

❎️负形×标记,绘文字中用途是当作点叉按钮,可以与✅️负形✓标记一个颜色。

但这个☑️ 就挺怪,好像与✅️重复,其实与 ☐☑︎☒ (用了VS15)是同一批的选项框,另外2个☐☒不是绘文字。


由于某些人会在评论区打扑克,我需要区分究竟是实心的心❤还是红桃

去年9月的版本就是不好区分的。2020-9-11
修改后,当前v3
方片♦原做成菱形,直到参考了这个


绘文字似乎不重视麻将,并没有全套的麻将绘文字,仅一个🀄是规定为彩色的(微软大善人把全套做成彩色是个例外)。虽然没必要,我顺带把🀆白板 和🀫牌背 给做了。

牌背感觉比较塑料……

由于我想让该字体完全原创,所以没用现成Noto字体,找了张不错的实物图作参考搞了个“黑体楷书(?)”。

[玄海 - 麻雀牌Wiki](w.atwiki.jp/mjpai/pages/18.html)

同理,交通标志停车让行🛑则是不用思源黑体,直接拍了张照片参考。

各地的🛑设计各不相同,系统字体只能采用最无聊的那种。

还有波浪线 〰〰〰 等的制作就不介绍了吧☘️



FLAG

为了让绘文字便于使用,有些复杂的处理被隐藏起来,但既然您看到这里大概也明白:某些看上去是1个的绘文字,实际上由不止1个字符组成:这个💙U+1F499是1个字符,但这个❤️(U+2764 U+FE0F)是2个字符,而这个👁️‍🗨️(U+1F441 U+FE0F U+200D U+1F5E8 U+FE0F)是5个字符(👁️彩色+[ZWJ]+🗨️彩色)。

隐藏技就是:统一码里没有一面国旗被编码,大多国家、属地、具特殊科学价值地点、组织旗帜是由区域指示符序列(Regional Indicator Sequences,简称RI)组成,是26个像🇷、🇸、🇺……这样的字符。而RI遵循 ISO 3166-1二位字母代码,比如俄罗斯的二位字母代码就是RU,那么把🇷、🇺贴在一起,就成了🇷🇺 ——你在选中的时候会发现这2个字符紧贴在一起没法分开成🇷 🇺,这就是有意向用户隐藏起来的程序处理,防止用户困惑:怎么旗子点一下删除就变成一个英文绘文字了……

而呈现为旗帜就是字体解决的事。字体在收到有效的RI后会找到相应的旗帜字形给软件显示,如果没有相应旗帜,那就显示为类似下图这样:


目前只有SU、LQ、RK有效,无效组合的字符只会拼起来。用的英文字体是我另一个原创字体,以后再介绍罢。


许多国家没撑到 ISO 3166-1 确立的时候(初次发表于1974年)就灭亡了,但苏联(Soviet Union)恰好有二位字母代码:SU 因历史原因被保留不会被用作别的用途——直到目前还有.su 域名,所以🇸🇺技术上允许呈现为苏联国旗。

SU 原本自1992年9月起做为过渡性保留代码,自2008年6月改起为特殊保留代码

实际上此前已存在支持苏联国旗的彩色字体 [BabelStone Flags](babelstone.co.uk/Fonts/Flags.html),不过打开发现字形曲线似乎是自动扫描的,比较渣,所以我重新绘制了。

这个二位代码是否可以自己编?倒也有先例:

代码 XE、XS、XW 被WhatsApp软件分别用于表示英格兰、苏格兰、威尔士国旗的表情图标。

但前提是,使用者自定义代码:当使用者采用ISO 3166-1代码系统时,在其内部添加用于进一步表示其它国家、地区或地理区域名称的代码,ISO 3166/MA将不会在标准的更新过程中使用这些代码。下面的二位代码可以由使用者自由分配:AA、QM到QZ、XA到XZ、以及ZZ。

这意味着跟私用区一样可能撞车。

于是暂时从未分配代码里挑出2个:🇱🇶(LQ,Liuqiu)、🇷🇰(RK,Ryukyu)冒充琉球国代码。

参考:ja.wikipedia.org/wiki/琉球王国、Flag_of_Ryukyu.svg

苏联旗子就这么长……

我将字形做成符合其实际纵横比例的平放样式,无旗杆,不勾边(白底旗看不到边是正常情况)

如果你的软件不支持RI,那么请从私用区复制:U+E001、U+E002。含后备单色字形。

还有一个 Flag Emoji Tag Sequences (使用U+1F3F4🏴 和 不可见的标签符) 是对应ISO 3166-2代码的,如统一码规定的英格兰旗🏴󠁧󠁢󠁥󠁮󠁧󠁿,本文篇幅过长不提。

该彩色字体为矢量的CPAL制式,Win10和新浏览器应该都支持。可在这下载与在线预览:

[MY1L/wwwoff](github.com/MY1L/wwwoff/releases)


端午节修订:在github写了个干扰其他绘文字字体显示旗帜的解决方案。

自制彩色字体Zsye发布・绘文字的隐藏技的评论 (共 条)

分享到微博请遵守国家法律