【问题标题】:jpeg/ png Image Insertion Error- python-docxjpeg/png 图像插入错误 - python-docx
【发布时间】:2021-07-25 03:46:15
【问题描述】:

我正在尝试将图像从一个 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

谁能建议如何解决这个错误。

【问题讨论】:

    标签: python python-docx


    【解决方案1】:

    有些图片可能是在旧款 iPhone 上拍摄的,python-docx 无法识别。这些图像省略了标准图像标题的某些部分,这会阻止python-docx 识别它们。

    解决方法是将图像加载到 Pillow 中,然后将其保存为相同类型。这个过程会恢复标题,python-docx 应该能够正确读取它。

    大概是这样的:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我认为 OP 没有这个问题。因为在那个问题中有明确提到图像格式是 .wmf 并且 OP 有 jpeg/png 格式的图像。
      • 没错,我同意,但在解决方案中,已经提到库使用图像标题识别图像。因此,最好先使用像枕头这样的东西来重新保存图像,以验证是否没有标题问题。我确实意识到,我的措辞让我的外卖变得模棱两可,但这可能是一个潜在的问题。
      【解决方案3】:

      根据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结尾的文件并将这些图像添加到文档中。

      【讨论】:

        猜你喜欢
        • 2019-10-17
        • 1970-01-01
        • 2014-07-17
        • 2015-03-15
        • 1970-01-01
        • 2015-01-12
        • 2014-09-17
        相关资源
        最近更新 更多