【问题标题】:Bluring the Image which is under specific Heading using Python docx使用 Python docx 模糊特定标题下的图像
【发布时间】:2017-11-17 09:41:23
【问题描述】:

我打算搜索文档中的特定标题,然后我必须删除该标题中的所有内容。文档有很多标题,每个标题可以有段落、表格、图片,也可以任意组合。

我已经安装了docx,我可以搜索特定的标题,删除段落,表格。

现在我无法访问该标题下的图像。为了表明,图像被删除,我们正在尝试模糊图像

问题 1:我能够获取文档中所有图像的图像 ID(资源 ID)、图像名称。但是我不知道如何获取特定标题下的图像的资源ID,然后我必须对其进行模糊处理。

问题 2:我在 python 代码中使用 VBMacro 启用了 Track Changes 选项。但是我使用 docx(删除线)所做的任何更改都不会突出显示以进行跟踪。

【问题讨论】:

    标签: python python-docx


    【解决方案1】:

    这是两个独立的问题(或三个,取决于您的计算方式)。我将在这里解决第一个问题,您可以将另一个问题作为单独的新问题发布。 (也许是:“如何使用 python-pptx 跟踪 Word 文档中的更改”)。

    关于模糊图像,您面临两个挑战:

    1. 识别与文档中特定区域相关的图像。

    2. 模糊图像。

    python-docx 中没有对这些操作的直接 API 支持。但是,您可以使用 python-docx 访问底层 XML 并使用 lxml 调用(python-docx 在内部使用)进行更改。这种努力通常被称为“变通功能”,因此如果您在 Google 上搜索“python-docx OR python-pptx 变通功能”,您会找到示例。

    内嵌图像存储在Run 级别。因此,您可以遍历感兴趣部分中的所有运行,并查看其中是否有图像。这个来自python-docx 项目的分析页面包含您需要的一些详细信息:http://python-docx.readthedocs.io/en/latest/dev/analysis/features/shapes/shapes-inline.html

    基本上你会做这样的事情:

    for run in runs:  # however you decide to get the runs
        r = run._element  # this is the `<w:r>` XML element for the run
        pics = r.xpath('.//w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic')
        if not pics:
            break
        print(r.xml)  # if you want to see the XML for this run
    

    这将为包含图片的运行元素打印 XML。

    关于实际的模糊,我能想到两种方法:

    1. 用“模糊”版本替换当前图片。
    2. 在 Word 中更改图像的透明度,使其看起来更亮。这不会从图像中删除细节,实际图像仍然在“后面”,没有改变,例如,如果用户想要右键单击并选择“保存图像...”。

    第二种方法要容易得多。您必须决定它是否符合您的要求。

    一旦您决定要采用哪种方式,您就可以搜索该问题的解决方案或提交一个针对该主题的新问题。

    【讨论】:

    • @Scanny,我已经使用了你提到的代码,通过以下方法得到了资源ID、文档部分和图像部分。 rID = pics[0].blipFill.blip.attrib.values() document_part = document.part image_part = document_part.related_pa​​rts[rID[0]]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    相关资源
    最近更新 更多