首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python测试一个字形是否是同一字体中另一个字形的反射

用Python测试一个字形是否是同一字体中另一个字形的反射
EN

Stack Overflow用户
提问于 2015-10-04 20:25:04
回答 2查看 235关注 0票数 1

List of all unicode's open/close brackets?的启发下,我试图找到一个列表,其中列出了一个给定字体中的所有unicode字形,它们是彼此的反射。首先,我只需要能够测试一个字形是否是另一个字形的反映。下面我进行了两次不同的尝试( render_char函数的两种不同实现),但我无法使用这两种方法将“(‘和’)”识别为镜像。我该怎么做?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-04 21:01:31

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

当前url为http://www.unicode.org/Public/UNIDATA/BidiMirroring.txt

我不认为使用呈现的象形文字可以可靠地工作。有很多原因可以解释。()并不是精确的镜像,比如字符周围的间距、暗示和反混叠,可能字体稍微倾斜,或者字体设计者只是让两个括号有点不同等等。其他字符被旋转,而不是镜像,比如在一些字体中,以及中文引号

票数 5
EN

Stack Overflow用户

发布于 2015-10-04 21:01:40

我认为渲染是错误的。这取决于字体和字体是否知道如何呈现这一点。我听说unicode字符有关于这种对称性的规范。也许是以他们的名义编码的。“左”和“右”“下标”。看看brackets.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32938010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档