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
タグ