亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python利用lxml庫剩下操作svg圖片

 更新時間:2023年01月21日 08:25:27   作者:夢想橡皮擦  
在大多數(shù)場景中,我們都用?lxml?庫解析網(wǎng)頁源碼,但你是否知道,lxml?庫也是可以操作?svg?圖片的。本文就來和大家聊聊具體操作方法,希望對大家有所幫助

在大多數(shù)場景中,我們都用 lxml 庫解析網(wǎng)頁源碼,但你是否知道,lxml 庫也是可以操作 svg 圖片的。我們可以使用 lxml 中的 etree 模塊來解析 SVG 文件,然后使用 SVG 中的各種元素和屬性來進行操作。

lxml 操作 svg 圖片示例

在本篇博客的入門篇,我們首先使用一下 lxml 庫解析 svg 文件,并修改它的顏色。

SVG 圖片生成,可以查看 《Python 生成 svg 圖片,一篇博客帶你掌握 Python 與 svg 之間的操作》 這篇博客。

借用 svgwrite 庫,生成一個紅色背景的 svg 圖片。

import svgwrite

dwg = svgwrite.Drawing('demo.svg', size=(100, 20), profile='tiny')
dwg.add(dwg.rect(insert=(0, 0), size=(100, 20), fill='red'))
phone_number = '橡皮擦'
dwg.add(dwg.text(phone_number, insert=(0, 15), fill='white', font_size=12))

dwg.save()

同時查看一下 svg 內容,如下所示。

<?xml version="1.0" encoding="utf-8" ?>
<svg baseProfile="tiny" height="20" version="1.2" width="100" xmlns="http://www.w3.org/2000/svg"
     xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs/>
    <rect fill="red" height="20" width="100" x="0" y="0"/>
    <text fill="white" font-size="12" x="0" y="15">橡皮擦</text>
</svg>

我們需要替換的內容是 fill="white" ,將其修改為 fill="#03a9f4"。使用 lxml 讀取該文件,進行顏色替換。

from lxml import etree

# 解析SVG文件
svg_file = 'demo.svg'
with open(svg_file, 'rb') as f:
    svg_data = f.read()
    parser = etree.XMLParser(remove_blank_text=True)
    svg_tree = etree.fromstring(svg_data, parser)

# 修改顏色
for element in svg_tree.iter():
    if 'fill' in element.attrib:
        # 替換顏色
        element.attrib['fill'] = element.attrib['fill'].replace('white', '#03a9f4')

# 保存修改后的SVG文件
with open('modified_demo.svg', 'wb') as f:
    f.write(etree.tostring(svg_tree, pretty_print=True))

此時替換之后,再次查看 svg 圖片源碼內容,如下所示。

<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="20" version="1.2" width="100">
  <defs/>
  <rect fill="red" height="20" width="100" x="0" y="0"/>
  <text fill="#03a9f4" font-size="12" x="0" y="15">&#27233;&#30382;&#25830;</text>
</svg>

重點注意 text 元素部分,發(fā)現(xiàn) fill 屬性的值已經(jīng)被修改成最新的顏色了。

lxml 給 svg 圖片添加新元素

使用 append() 函數(shù)可以給 svg 圖片添加新元素,例如下述代碼將添加一個矩形到圖片中。

from lxml import etree

# 解析SVG文件
svg_file = 'demo.svg'
with open(svg_file, 'rb') as f:
    svg_data = f.read()
    parser = etree.XMLParser(remove_blank_text=True)
    svg_tree = etree.fromstring(svg_data, parser)

new_element = etree.Element('rect', x='5', y='5', width='50', height='20', style='fill:#03a9f4')
svg_tree.append(new_element)



# 保存修改后的SVG文件
with open('modified_demo.svg', 'wb') as f:
    f.write(etree.tostring(svg_tree, pretty_print=True))

這里矩形的定位并沒有精確計算,實現(xiàn)的效果圖如下所示。

lxml 刪除 svg 圖片中的元素

除新增外,還可以對 svg 中元素進行刪除操作。示例代碼如下所示。

from lxml import etree

# 解析SVG文件
svg_file = 'modified_demo.svg'
with open(svg_file, 'r') as f:
    svg_data = f.read()
    parser = etree.XMLParser(remove_blank_text=True)
    svg_tree = etree.fromstring(svg_data, parser)

# 通過 xpath 查找需要刪除的元素
elements_to_remove = svg_tree.xpath("http://text")
print(elements_to_remove)
for element in elements_to_remove:
    element.getparent().remove(element)

運行代碼會發(fā)現(xiàn)通過 xpath 無法查找到目標元素 text,這時因為 SVG 文件中含有命名空間,導致 xpath 語法查詢不到相應的元素,可以通過為 xpath 語法指定命名空間來解決這個問題。

添加命名空間之后的提取語法如下所示。

from lxml import etree

# 解析SVG文件
svg_file = 'modified_demo.svg'
svg_tree = etree.parse(svg_file)
root = svg_tree.getroot()


# 獲取命名空間
ns = {'svg': root.nsmap[None]}
# 通過 xpath 查找需要刪除的元素
elements_to_remove = svg_tree.xpath("http://svg:text", namespaces=ns)

print(elements_to_remove)

尤其注意 xpath 部分需要使用 //svg:text 進行提取。

如果不提前生命 ns 變量,可以使用下述代碼進行指定命名空間。

elements_to_remove = svg_tree.xpath("http://svg:circle", namespaces={'svg': 'http://www.w3.org/2000/svg'})

有了上述基礎之后,完整的 lxml 刪除元素代碼如下所示。

from lxml import etree

# 解析SVG文件
svg_file = 'modified_demo.svg'
svg_tree = etree.parse(svg_file)
root = svg_tree.getroot()


# 獲取命名空間
ns = {'svg': root.nsmap[None]}
# 通過 xpath 查找需要刪除的元素
elements_to_remove = svg_tree.xpath("http://svg:text", namespaces=ns)

print(elements_to_remove)
for element in elements_to_remove:
    element.getparent().remove(element)

# 保存修改后的 SVG 文件
with open('modified_demo1.svg', 'wb') as f:
    f.write(etree.tostring(svg_tree, pretty_print=True))

以上就是python利用lxml庫剩下操作svg圖片的詳細內容,更多關于python lxml操作svg的資料請關注腳本之家其它相關文章!

相關文章

  • Python3 批量掃描端口的例子

    Python3 批量掃描端口的例子

    今天小編就為大家分享一篇Python3 批量掃描端口的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python自動化處理日常任務的示例代碼

    Python自動化處理日常任務的示例代碼

    這篇文章主要為大家詳細介紹了如何使用Python自動化處理日常任務,例如自動化文件管理,自動化定時任務,自動化發(fā)送郵件等,有需要的小伙伴可以參考一下
    2025-01-01
  • 進一步了解Python中的XML 工具

    進一步了解Python中的XML 工具

    這篇文章主要介紹了更為深入的的Python中的XML工具,本文來自于IBM官方開發(fā)者技術文檔,需要的朋友可以參考下
    2015-04-04
  • python標識符命名規(guī)范原理解析

    python標識符命名規(guī)范原理解析

    這篇文章主要介紹了python標識符命名規(guī)范原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Python 解析簡單的XML數(shù)據(jù)

    Python 解析簡單的XML數(shù)據(jù)

    這篇文章主要介紹了Python 如何解析簡單的XML數(shù)據(jù),文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • 關于win10在tensorflow的安裝及在pycharm中運行步驟詳解

    關于win10在tensorflow的安裝及在pycharm中運行步驟詳解

    這篇文章主要介紹了關于win10在tensorflow的安裝及在pycharm中運行的步驟詳解,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Python對列表去重的多種方法(四種方法)

    Python對列表去重的多種方法(四種方法)

    開發(fā)中對數(shù)組、列表去重是非常常見的需求,對一個list中的id進行去重,有下面幾種方法,具體內容詳情大家參考下本文
    2017-12-12
  • Python使用pyecharts控件繪制圖表

    Python使用pyecharts控件繪制圖表

    這篇文章介紹了Python使用pyecharts控件繪制圖表的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • python網(wǎng)絡爬蟲學習筆記(1)

    python網(wǎng)絡爬蟲學習筆記(1)

    這篇文章主要為大家詳細介紹了python網(wǎng)絡爬蟲學習筆記的第一篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • TensorFlow中權重的隨機初始化的方法

    TensorFlow中權重的隨機初始化的方法

    本篇文章主要介紹了TensorFlow中權重的隨機初始化的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02

最新評論