jpeg/png 图片插入错误- python-docx

jpeg/ png Image Insertion Error- python-docx

我正在尝试将图像从一个 word 文档复制到另一个。 为此,我使用以下代码将 word 文档中的所有图像提取到一个文件夹 (img_folder) 中:

docx2txt.process('Sample2.docx', 'img_folder/')

使用上面的代码,图像以 jpeg/png 格式保存到 img_folder 但是,当我尝试从该文件夹插入图像时,出现以下错误:

File "D:/Pycharm Projects/pydocx/newaddImg.py", line 60, in copy
    newp.add_run().add_picture(imgPath)
  File "D:\Pycharm Projects\pydocx\env\lib\site-packages\docx\text\run.py", line 62, in add_picture
    inline = self.part.new_pic_inline(image_path_or_stream, width, height)
  File "D:\Pycharm Projects\pydocx\env\lib\site-packages\docx\parts\story.py", line 56, in new_pic_inline
    rId, image = self.get_or_add_image(image_descriptor)
  File "D:\Pycharm Projects\pydocx\env\lib\site-packages\docx\parts\story.py", line 29, in get_or_add_image
    image_part = self._package.get_or_add_image_part(image_descriptor)
  File "D:\Pycharm Projects\pydocx\env\lib\site-packages\docx\package.py", line 31, in get_or_add_image_part
    return self.image_parts.get_or_add_image_part(image_descriptor)
  File "D:\Pycharm Projects\pydocx\env\lib\site-packages\docx\package.py", line 74, in get_or_add_image_part
    image = Image.from_file(image_descriptor)
  File "D:\Pycharm Projects\pydocx\env\lib\site-packages\docx\image\image.py", line 55, in from_file
    return cls._from_stream(stream, blob, filename)
  File "D:\Pycharm Projects\pydocx\env\lib\site-packages\docx\image\image.py", line 176, in _from_stream
    image_header = _ImageHeaderFactory(stream)
  File "D:\Pycharm Projects\pydocx\env\lib\site-packages\docx\image\image.py", line 199, in _ImageHeaderFactory
    raise UnrecognizedImageError
docx.image.exceptions.UnrecognizedImageError

任何人都可以建议如何解决此错误。

请检查您的问题是否与 重复。无论哪种情况,相同的答案都应该能够让您更深入地了解您目前似乎面临的问题。

根据documentation,你可以这样插入图片:

from docx import Document
import os

document = Document()

directory="img_folder"

for x in [os.path.abspath(os.path.join(directory, p)) for p in os.listdir(directory) if p.endswith(('jpg', 'png'))]:
    document.add_picture(x)

这里我们只是从 img_folder 目录中提取所有以 jpgpng 结尾的文件,并将这些图像添加到文档中。

有一些图像,可能是 iPhone 拍摄的,python-docx 无法识别。这些图像省略了标准图像的某些部分 header,这导致 python-docx 无法识别它们。

修复方法是将图像加载到 Pillow 中,然后将其保存为相同类型。此过程会恢复 header,然后 python-docx 应该能够无误地读取它。

大致如下:

from PIL import Image

Image.open("corrupted-header.jpg")
Image.save("fixed-header.jpg")

您可以在 try-except 块中执行此操作,并且只处理引发 UnrecognizedImageError 的文件,或者您可以 pre-emptively pre-process 所有图像文件。

Pillow 文档的相关部分在这里:
https://pillow.readthedocs.io/en/stable/reference/Image.html