В дополнение к этой теме покажу ещё один способ как достать изображение из архива, не сохраняя его на диск и сразу перегнать в класс PIL.Image для дальнейших манипуляций.
Что есть ресурс в данном контексте? Это любой объект который можно прочитать как файл.
В Python 3.7 появился новый стандартный способ работы с ресурсами внутри пакетов. Это модуль importlib.resources.
Его следует использовать и для случаев с контейнерами (ZIP, EGG) и для обычных пакетов.
Для начала импортнём нужные модули
from importlib.resources import read_binaryЧитаем файл ресурса из пакета
from PIL import Image
import io
data = read_binary("package_name", "image.jpg")
Создаём класс Imageimg = Image.open(io.BytesIO(data))Картинка загружена в память, можно с ней что-то делать
img.thumbnail((200, 200))И после изменений сохранить в файл
img.save(path, 'JPG')или использовать еще как-то
img.show()Модуль получил бекпорт для старых версий в виде стороннего пакета importlib_resources.
До появления этого модуля использовался модуль pkg_resources, входящий в состав setuptools. Но он теперь неактуален.
#libs