思源字体是不是有点问题

2019-10-23 12:43:50 +08:00
 47042

我用 python 写了一个程序,自动把文字转成图片。今天实现了类似 word 的两端对齐功能(之前是类似左对齐)但是实现后发现了问题,部分汉字的高度不在同一水平线上,甚至有头部被削去几个像素的现象。

如图:

(上面是旧的,即不使用两端对齐,下面是新的,注意看“日”)

(注意看数字 92、百分号、还有“了”下移了)

我试了更换字体,由 SourceHanSansCN-Regular.ttf 换用 SourceHanSansSC-Regular.ttf ,“日”、92 的问题不出现了,可是整行水平方向不是很齐。还换过微软雅黑,就完全看不出这个问题。

由于在写入文字的实现上没有什么区别,特别是 y 坐标确定的位置应该是不变的。所以我的推测是,由于两端对齐需要对一行文字进行分词,加入一个平均的偏移量,然后逐个在加上偏移的位置写入文字,我怀疑这个过程中由于是逐一写入而非整行写入,导致文字不对齐。

大家有比较熟悉字体的吗?怎么解决这个问题?

4023 次点击
所在节点    全球工单系统
11 条回复
codehz
2019-10-23 12:53:17 +08:00
你用啥渲染的文字总得写出来吧(
47042
2019-10-23 12:57:48 +08:00
@codehz 用的是 pillow 里面 truetype 的方式,然后直接 draw.text 上去
learnshare
2019-10-23 13:05:04 +08:00
这要深入了解字体、字形、对齐以及绘图算法了
简单的办法是换其他字体再试
47042
2019-10-23 13:42:07 +08:00
@learnshare


我换过字体啊,雅黑没这个问题。

我写了段代码,各位看看有什么问题吗?(请从这边下载 SourceHanSansCN-Regular.ttf 字体 https://github.com/Pal3love/Source-Han-TrueType,然后放同目录下)

import os
import re
import sys
from PIL import Image, ImageDraw, ImageFont

text = "在流行 VPN 服务 NordVPN 证实遭到入侵但披露 100%滞后的新闻传出之后,为什么不要使用 VPN 服务的争论再起。VPN 是一种代理服务器,服务商能看到用户的所有流量"
font = ImageFont.truetype(os.path.join("", "SourceHanSansCN-Regular.ttf"), 18)
im = Image.new("RGB", (1000, 200), (255,255,255))
draw = ImageDraw.Draw(im)
draw.text((20, 20), text, fill=(0, 0, 0), font=font)

p = re.compile(r'([\u4e00-\u9fa5])')
str_list = p.split(text)
words = [w for w in str_list if len(w.strip()) > 0]
width = 20
for word in words:
draw.text((width, 80), word, fill=(0, 0, 0), font=font)
width += font.getsize(word)[0]

im.save("testfont.png")
47042
2019-10-23 13:44:03 +08:00
上面是旧的,下面是新的,注意看 100 的顶部,还有汉字水平对齐的问题(如“争论再起”的“再”)


![testfont.png]( https://i.loli.net/2019/10/23/G6ju9gWPkmnXOrB.png)
47042
2019-10-23 13:47:38 +08:00
@47042 不想用 gist 贴代码,这边贴上来缩进没有了。
可以参考这边: https://pastebin.com/3Qix1xsD
kokutou
2019-10-23 13:50:34 +08:00
别用雅黑。。会有版权问题好像。。。
试试文泉驿吧。。。
47042
2019-10-23 13:52:20 +08:00
@kokutou 我不想用雅黑,所以用了思源,而且觉得思源也挺好的,结果出了这么诡异的问题
skiy
2019-10-23 13:54:16 +08:00
@47042 试试普惠体看看?
47042
2019-10-23 14:31:31 +08:00
我找到大概原因了,有可能是思源没有提供官方的 ttf,https://github.com/Pal3love/Source-Han-TrueType 这边下载的经过转换的 ttf 可能会有这个问题。我现在用 otf 就没有出现这个问题。
47042
2019-10-23 14:54:45 +08:00
我错了。。用了 otf 还是有问题。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/612064

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX