通过把dir(pygame.font.Font())和dir(pygame.font.Font().render())打印出来后,挨个尝试。并使用多个字母试验后,终于找到计算字母或字符串基线的方法(基线的原点相对于图片的左上角(0,0)的坐标,即下图中的origin相对于整个图片左上角的位置)。非常复杂,所以记录下来。

myfont = pygame.font.Font(None, 70)

结论1、我发现myfont.get_ascent()在所有的实验中都等于origion的y坐标值。

结论2、不使用myfont.get_ascent()的,比较有把握的方法:

①参考https://blog.csdn.net/qq_41556318/article/details/86303502(已私藏)中pygame.font.Font.metrics()的解释:

获取字符串参数每个字符的参数。

metrics(text) -> list

返回一个列表,包含每个字符的属性元组。形式如:[(minx, maxx, miny, maxy, advance), (minx, maxx, miny, maxy, advance), ...]

元组内各个元素的含义如下图:

列表内不可识别的字符对应的元组内参数均为 None。

import pygame as pg
py.init()
myfont = pg.font.Font(None, 70) # None会调用默认的自带的字体
yy0 = myfont.size('j')  # yy1: <class tuple>: (27, 49)
yy1 = myfont.metrics('j')  # yy1: <class 'list'>: [(-1, 10, -10, 35, 13)]  # -> [(minx, maxx, miny, maxy, advance), (minx, # maxx, miny, maxy, advance), ...]
textImage = myfont.render('j', True, (255, 0, 0))yy3 = textImage.get_rect()  # yy3: <rect(0, 0, 14, 49)> -> (x1, y1, x2, y2) #而且偶然的机会,测得[x1, x2) [y1, y2)是前闭后开的
yy4 = textImage.get_bounding_rect()  # yy4: <rect(0, 4, 11, 45)>  ->  (x1, y1, w, h)我经过实验,发现其他的属性和方法对于找到origin都没有帮助。
1、可以看到yy4中 x1 + w = yy3的14yy4中 y1 + h = yy3的49
2、根据图可知,x方向上,相对于纵向的baseline,向x的负方向,x的值为负;y方向上,相对于横向的baseline, 向y的正方向,y的值为负;所以x和y方向上计算origin的加和减运算是不同的(见3中minx, miny前的 加号和减号),清楚这一点可以防止思考时混乱。
3、yy4_y1 + h + miny  就是origin相对于左上角的y坐标;yy4_x1 + w - minx  就是origin相对于左上角的x坐标。以y方向为例稍微解释一下:yy4_y1 + h得到的是 字没有外扩的bbox的右下角  相对于 外扩后的图像的左上角(0, 0)  的y值,miny是字没有外扩的bbox的右下角 相对于 origion的y值 的y值; 所以可以通过这两个值,计算出origion相对于外扩后的图像的左上角(0, 0)  的y值

仔细想了一下,好像直接使用textImage.get_bounding_rect()的结果就行了,就已经是紧贴字的bbox了,没必要再去寻找baseline了。找到baseline也是为了计算这个外接bbox。

补充:在https://blog.csdn.net/qq_26093511/article/details/60756488中看到了这个:

即:对于垂直文本排列,基线是垂直的,与垂直轴一致。

pygame.font.Font().render() 计算基线(baseline)的原点(origin)坐标相关推荐

  1. pygame之font模块

    font-用于加载和渲染字体的Pygame模块 pygame.font.init-初始化字体模块 pygame.font.quit-取消初始化字体模块 pygame.font.get_init-如果字 ...

  2. pygame.error: font not initialized的解决及init()到底干了什么

    环境 Python3.6.8 pygame1.9.4 贴上报错源码: import pygame my_font = pygame.font.SysFont('arial', 16) my_font ...

  3. python画图时,中文无法正常显示的问题,RuntimeWarning: Glyph 26631 missing from current font. font.set_text(s, 0, fl

    python画图时,中文无法正常显示的问题,RuntimeWarning: Glyph 26631 missing from current font. font.set_text(s, 0, fla ...

  4. Linux环境下Font font = new Font(黑体, Font.BOLD, 18)[BufferedImage~Graphics~drawString]中文乱码

    Linux环境下"Font font = new Font("黑体", Font.BOLD, 18)"[BufferedImage~Graphics~drawS ...

  5. Android文字基线Baseline算法的使用讲解,小码农也有大梦想

    Baseline是文字绘制时所参照的基准线,只有先确定了Baseline的位置,我们才能准确的将文字绘制在我们想要的位置上.Baseline的概念在我们使用TextView等系统控件直接设置文字内容时 ...

  6. python经典字体警告:RuntimeWarning: Glyph missing from current font. font.set_text(s, 0.0, flags=flags)

    文章目录 前言 python经典字体警告:RuntimeWarning: Glyph missing from current font. font.set_text(s, 0.0, flags=fl ...

  7. 什么是基线(Baseline)

    基线(Baseline) 在计算机术语中,基线(Baseline)是软件文档或源码(或其它产出物)的一个稳定版本,它是进一步开发的基础. 关于基线可以从以下两个方面来理解: 1)代表多个源代码文件的一 ...

  8. 什么是基线(Baseline)?

    什么是基线(Baseline)? 基线是软件文档或源码(或其它产出物)的一个稳定版本,它是进一步开发的基础.所以,当基线形成后,项目负责SCM的人需要通知相关人员基线已经形成,并且哪儿可以找到这基线了 ...

  9. gps两点距离 php,PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法

    <PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法>要点: 本文介绍了PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法,希望对您有用.如果有疑问,可以联系我们. 本文实 ...

  10. php 地图 距离,PHP计算百度地图两个GPS坐标之间距离的方法

    这篇文章主要介绍了PHP计算百度地图两个GPS坐标之间距离的方法,是针对百度地图接口开发的典型应用,需要的朋友可以参考下 本文实例讲述了PHP计算百度地图两个GPS坐标之间距离的方法.分享给大家供大家 ...

最新文章

  1. 图像分类:CVPR2020论文解读
  2. DOS命令大全(经典收藏)
  3. Android开发之GridView的使用(解读谷歌官方API)
  4. Servlet基础(三) Servlet的多线程同步问题
  5. [恢]hdu 2511
  6. mysql cve 2016 3521_MySQL-based databases CVE -2016-6663 本地提权
  7. linux --- TCPdump 工具
  8. 怎么打包图片_房产也能批发!澳村庄40栋房打包出售,总价$175万,买了变村长!...
  9. Android 调用系统拍照后返回的图片变小了(变模糊了)
  10. 计算机网络:端到端原则对互联网的影响与面临的问题
  11. ra_customer_trx_all 的XLA会计科目
  12. 知识积累 | GATK的使用
  13. HOJ 2706 Key Task
  14. matlab提取电压基波分量,有源电力滤波器三种基波提取方法的对比分析
  15. 嵌入式Linux容器技术
  16. 赵小楼《天道》《遥远的救世主》解读(40)芮伟峰的“父爱”和芮小丹的“活出自我”
  17. [生存志] 第47节 夏姬媚株林
  18. 如何删除数组中的一个元素
  19. [Python] reverse()函数 VS reversed()函数
  20. php多表查询性能优化,MSSQL_SQL Server多表查询优化方案集锦,SQL Server多表查询的优化方案是 - phpStudy...

热门文章

  1. 关于保留小数点后几位数字之我见
  2. c#调用python的四种方法
  3. 181110每日一句
  4. Atitit 人工智能 统计学 机器学习的相似性 一些文摘收集 没有人工智能这门功课,人工智能的本质是统计学和数学,就是通过机器对数据的识别、计算、归纳和学习,然后做出下一步判断和决策的科学
  5. Atitit java的异常exception 结构Throwable类
  6. atitit.提升备份文件复制速度(3) ----建立同步删除脚本
  7. paip.提升用户体验----应用程序调用外部字体的应用..
  8. paip.c++ qt __gxx_personality_sj0 __gxx_personality_v0问题的解决
  9. 人力资源SaaS“一哥”,二十年艰难进化
  10. 资管运营BAND原创 | 他山之石:境外基金业绩报酬计算方法(二)