最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python利用lxml庫(kù)剩下操作svg圖片

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

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

lxml 操作 svg 圖片示例

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

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

借用 svgwrite 庫(kù),生成一個(gè)紅色背景的 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()

同時(shí)查看一下 svg 內(nèi)容,如下所示。

<?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>

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

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))

此時(shí)替換之后,再次查看 svg 圖片源碼內(nèi)容,如下所示。

<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>

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

lxml 給 svg 圖片添加新元素

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

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))

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

lxml 刪除 svg 圖片中的元素

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

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 查找需要?jiǎng)h除的元素
elements_to_remove = svg_tree.xpath("http://text")
print(elements_to_remove)
for element in elements_to_remove:
    element.getparent().remove(element)

運(yùn)行代碼會(huì)發(fā)現(xiàn)通過 xpath 無法查找到目標(biāo)元素 text,這時(shí)因?yàn)?SVG 文件中含有命名空間,導(dǎo)致 xpath 語(yǔ)法查詢不到相應(yīng)的元素,可以通過為 xpath 語(yǔ)法指定命名空間來解決這個(gè)問題。

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

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 查找需要?jiǎng)h除的元素
elements_to_remove = svg_tree.xpath("http://svg:text", namespaces=ns)

print(elements_to_remove)

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

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

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

有了上述基礎(chǔ)之后,完整的 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 查找需要?jiǎng)h除的元素
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庫(kù)剩下操作svg圖片的詳細(xì)內(nèi)容,更多關(guān)于python lxml操作svg的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中argparse基本用法小結(jié)

    Python中argparse基本用法小結(jié)

    argparse是一個(gè)強(qiáng)大而靈活的模塊,它可以幫助你輕松地處理命令行參數(shù),本文主要介紹了Python中argparse基本用法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Python?Matplotlib繪制扇形圖標(biāo)簽重疊問題解決過程

    Python?Matplotlib繪制扇形圖標(biāo)簽重疊問題解決過程

    在使用Matplotlib畫圖時(shí),常會(huì)遇到標(biāo)簽重疊問題的時(shí)候,所以下面這篇文章主要給大家介紹了關(guān)于Python?Matplotlib繪制扇形圖標(biāo)簽重疊問題的解決過程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • python安裝sklearn模塊的方法詳解

    python安裝sklearn模塊的方法詳解

    這篇文章主要介紹了python安裝sklearn模塊的方法詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python3使用requests發(fā)閃存的方法

    Python3使用requests發(fā)閃存的方法

    requests是一個(gè)python 輕量的http客戶端庫(kù),相比python的標(biāo)準(zhǔn)庫(kù)要優(yōu)雅很多。接下來通過本文給大家介紹Python3使用requests發(fā)閃存的方法,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • 最新評(píng)論

    景德镇市| 株洲县| 佛教| 莆田市| 高陵县| 淅川县| 永顺县| 宣汉县| 铜鼓县| 宁阳县| 沐川县| 咸丰县| 安乡县| 定安县| 卢湾区| 板桥市| 墨竹工卡县| 叙永县| 什邡市| 通化县| 深泽县| 梁河县| 黄龙县| 错那县| 呼玛县| 霍城县| 澜沧| 延长县| 东阿县| 常熟市| 大英县| 秭归县| 金华市| 景东| 龙岩市| 汽车| 高青县| 崇阳县| 高台县| 呼伦贝尔市| 周至县|