網站首頁 編程語言 正文
2021SC@SDUSC
本篇文章將對dazhong.py的_get_font_dict_by_offset核心函數進行分析
在本項目中,一個文字有一個標簽,相同字體有相同的標簽,一個標簽對應一對xy坐標
因此通過獲取xy坐標來獲取文字。
完整代碼如下:
def _get_font_dict_by_offset(self, url):
"""
獲取坐標偏移的文字字典, 會有最少兩種形式的svg文件(目前只遇到兩種)
"""
res = requests.get(url,timeout=60)
# res.text 之時,Requests 會使用其推測的文本編碼。
html = res.text
font_dict = {}
# 正則表達式re.findall,返回string中所有與pattern匹配的全部字符串,返回形式為數組。
y_list = re.findall(r'd="M0 (\d+?) ', html)
# 如果y_list不為空,即找到了符合的字符串
if y_list:
font_list = re.findall(r'<textPath .*?>(.*?)<', html)
# enumerate() 函數用于將一個可遍歷的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標,
# 一般用在 for 循環當中。
for i, string in enumerate(font_list):
# 記錄下y坐標
y_offset = self.start_y - int(y_list[i])
sub_font_dict = {}
for j, font in enumerate(string):
# 記錄下x坐標
x_offset = -j * self.font_size
sub_font_dict[x_offset] = font
font_dict[y_offset] = sub_font_dict
# 沒找到符合的字符串的情況
else:
font_list = re.findall(r'<text.*?y="(.*?)">(.*?)<', html)
for y, string in font_list:
y_offset = self.start_y - int(y)
sub_font_dict = {}
for j, font in enumerate(string):
x_offset = -j * self.font_size
sub_font_dict[x_offset] = font
font_dict[y_offset] = sub_font_dict
print('字體字典',font_dict)
return font_dict
首先,通過正則表達式獲取對應的css樣式
res = requests.get(url,timeout=60)
# res.text 之時,Requests 會使用其推測的文本編碼。
html = res.text
font_dict = {}
# 正則表達式re.findall,返回string中所有與pattern匹配的全部字符串,返回形式為數組。
y_list = re.findall(r'd="M0 (\d+?) ', html)
如果存在,則進入if語句,如果不存在則進入else語句。
if,else語句里的代碼塊內容相似,它們都實現了相同的功能:得到與文字相關的xy坐標
font_list = re.findall(r'<textPath .*?>(.*?)<', html)
# enumerate() 函數用于將一個可遍歷的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標,
# 一般用在 for 循環當中。
for i, string in enumerate(font_list):
# 記錄下y坐標
y_offset = self.start_y - int(y_list[i])
sub_font_dict = {}
for j, font in enumerate(string):
# 記錄下x坐標
x_offset = -j * self.font_size
sub_font_dict[x_offset] = font
font_dict[y_offset] = sub_font_dict
這里給出svg樣例來進行說明
svg內容樣例`<text x="0" y="46">歷分爆</text>`
```
<text x="0" y="46">歷分爆鍋父碰茅恐寸矮異唐險乓絹梢菊裝羅拘欲則悲鵲北奉慕襖限洞都兇千密暮達快容糖秧澡私</text>
<text x="0" y="85">扔品惕倦南觀只死奪刊渾糠扭康淡蛛妄冶夫撿噴腳情項遵發滋銅灌鑼墊盲極歉事講腰押穿果或廉</text>
<text x="0" y="129">趁鼓鴿幼翅脖尼暢抽遺綢刪被海乞肺識壟素灣齊室夢姑善朗皮乒助攝辦長令勝煉摟陡漫場浪般價</text>
<text x="0" y="169">兔朱肝朽蹤騾弓帝人腐津代典志解責博建酬陽出技必詩救窯摘堤扁峰焰虜孩騎御愉爸敵閥頓仇于</text>
<text x="0" y="218">掛遍等紛壯隸非猾匹會載岸萄置緞姜星龍珍深許構違勢醫夾首卜汁把囑頂拿痛翁獄樣枝銷疑崇瀉</text>
<text x="0" y="259">傘追困到惜系伍奔貿野云蛇炮蟲童供內猜忍轎沙布執挑如得呀境禍崗飲又鄉燦搜扣脂遇中乙邁缺</text>
<text x="0" y="307">溝勺瓶毛豈宙漢奏愈返們姿化普壓連賓貨截您唇璃蘭雨染墨恢棕植灰垮茶右敞為太杰隙香雹將呆</text>
<text x="0" y="350">穩柄勞督仰股軋扎崖我悼影飽專藥給職逮剃耽騙拳塵提摧踐瑞談餃楊漁占孝亭林娃晃鄙臨央催箱</text>
它先記錄下y坐標,然后對子串再進行分解,通過計算生成新的x坐標。以x坐標為索引,重新構建子串。然后再以相應的y坐標為索引,子串整體作為一個元素。
原文鏈接:https://blog.csdn.net/weixin_45859345/article/details/122136619
相關推薦
- 2022-09-02 Qt為exe添加ico圖片的簡單實現步驟_C 語言
- 2022-06-28 ASP.NET一次性對GridView批量更新多行數據_實用技巧
- 2022-07-20 Python實現向PPT中插入表格與圖片的方法詳解_python
- 2022-04-12 Python中BeautifulSoup模塊詳解_python
- 2022-07-20 虛擬機下的/dev/sda1占用率為100%
- 2021-12-06 <a>標簽,跨域download屬性不生效問題,100%好用
- 2022-10-09 C#實現線性查找算法_C#教程
- 2022-09-02 Pytorch-LSTM輸入輸出參數方式_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支