python - 在 Python 中测试一个字形是否是同一字体中另一个字形的反射(reflect)

标签 python fonts python-imaging-library glyph

灵感来自 List of all unicode's open/close brackets?我试图找到给定字体中所有 unicode 字形的列表,这些字形相互反射(reflect)。首先,我只需要能够测试一个字形是否是另一个字形的反射(reflect)。下面我有两种不同的尝试(我的 render_char 函数的两种不同实现)但是我无法使用任何一种将“(”和“)”识别为镜像。我该怎么做?

from PIL import Image,ImageDraw,ImageFont
import freetype
import numpy as np

def render_char0(c):
    # Based on https://github.com/rougier/freetype-py/blob/master/examples/hello-world.py
    # Needs numpy (blech) and the image comes out the inverse of the way I expect
    face = freetype.Face("/Library/Fonts/Verdana.ttf")
    face.set_char_size( 48*64 )
    face.load_char(c)
    bitmap = face.glyph.bitmap
    w,h = bitmap.width, bitmap.rows
    Z = np.array(bitmap.buffer, dtype=np.ubyte).reshape(h,w)
    return Image.fromarray(Z, mode='L').convert('1')

def render_char1(c):
    # Based on https://stackoverflow.com/a/14446201/2829764
    verdana_font = ImageFont.truetype("/Library/Fonts/Verdana.ttf", 20, encoding="unic")
    text_width, text_height = verdana_font.getsize(c)
    canvas = Image.new('RGB', (text_width+10, text_height+10), (255, 255, 255))
    draw = ImageDraw.Draw(canvas)
    draw.text((5,5), c, font = verdana_font, fill = "#000000")
    return canvas

for render_char in [render_char0, render_char1]:
    lparen = render_char('(')
    rparen = render_char(')')
    mirror = lparen.transpose(Image.FLIP_LEFT_RIGHT)

    mirror.show()
    rparen.show()
    print mirror.tobytes() == rparen.tobytes() # False

最佳答案

在 Unicode 纯文本数据库中有一个名为 BidiMirroring.txt 的文本文件,其中包含所有镜像字符的列表。该文件很容易被程序解析。

当前网址是 http://www.unicode.org/Public/UNIDATA/BidiMirroring.txt

我不认为使用呈现的字形可以可靠地工作。例如,有很多原因。 () 不是精确的镜像,比如字符周围的间距,提示和抗锯齿,可能是字体稍微倾斜了,也可能是字体设计者刚刚制作的两个括号有点不同等。其他字符是旋转的,而不是镜像的,例如某些字体中的 ,以及中文引号

关于python - 在 Python 中测试一个字形是否是同一字体中另一个字形的反射(reflect),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32938010/

相关文章:

python - Django 自定义主键

python - 计算并绘制给定数据框的 95% 置信区间

windows - 如何自动选择最适合不同语言的字体?

java - 如何在 Java 中使用 Open Type 字体?

linux - 如何在 linux 系统上获取可在 .Xresources 配置中使用的有效字体名称?

python - 在 Python 中使用 Pillow 从图像裁剪区域

python - 使用 Python 图像库 (PIL),如何在另一幅图像上合成一幅带有 alpha channel 的图像?

python - 如何将多个值从异步函数返回到同步上下文?

Python:网络服务启动之前的网络调用

python - 带有 mask 和 RGB 图像的 Numpy/Scipy