Уменьшить размер картинок в документе Word. Не получается "достучаться" до картинки
Имеется много документов Word (.docx), каждый из которых содержит много картинок большого размера. Пытаюсь уменьшить размер всех картинок во всех документах и привести их к размеру 1427 х 1070. Вычитал, что с docx можно работать как с zip, т.к. похожая структура. Вот код:
import zipfile
from PIL import Image
doc_link = r"I:\Мой диск\документ.docx" #пример файла
custom_size = (1427, 1070)
with zipfile.ZipFile(doc_link) as zf:
for name in zf.infolist():
if name.filename.startswith('word/media/') and name.file_size > 50000:
image_to_resize = Image.open(name.filename) #в этой строке проблема,
# не могу достучаться до картинки модулем PIL.Image
image_to_resize = image_to_resize.resize(custom_size, Image.ANTIALIAS)
image_to_resize.save(name.filename) #и сохранить не получается
проблема в том, что не получется подцепить картинку модулем PIL, т.к. Image.open() предполагает в качестве аргумента путь к картинке.
Пробовал варианты:
image_to_resize = Image.open(f'{doc_link}\\{name.filename}')
путь так же не находит.
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Нужно распаковать картинку во временную папку и потом открывать её на обработку.
Или в память в file-like
image_to_resize = Image.open(zf.open(name.filename))
С сохранением
b = io.BytesIO()
image_to_resize.save(b)
b.seek(0)
zf.write(b, name.filename)