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
目录中提取所有以 jpg
和 png
结尾的文件,并将这些图像添加到文档中。
有一些图像,可能是 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
我正在尝试将图像从一个 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
目录中提取所有以 jpg
和 png
结尾的文件,并将这些图像添加到文档中。
有一些图像,可能是 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