docx
のドキュメントファイルから画像を取得する
xlsxファイルと同様に、docxファイルも拡張子が違うzipファイルだ。
だからzipファイルとして展開すればこれらのファイルに埋め込まれた画像を取得できるが、ドキュメントの情報を取得しながら画像を取得したいときもある。
python-docxを使って画像を抽出する。
from io import BytesIO
from PIL import Image
from docx import Document
from docx.oxml.shape import CT_Picture
# 画像を抽出する
def extract_images(e, doc):
if isinstance(e, CT_Picture):
rid = e.blipFill.blip.embed
item = doc._part.related_parts[rid]
yield Image.open(BytesIO(item.blob))
else:
for c in e:
for v in extract_images(c, doc): yield v
# iteratorを取得する
def get_iter(doc):
root = doc._body._element
for e in root:
for image in extract_images(e, doc): yield image
if __name__ == '__main__':
doc = Document('docxファイルのパス')
for image in get_iter(doc): print(image)
2024/10/05 11:42