Не понимаешь как работать с imgproxy в своих python-проектах? Или понимаешь, но хочешь начать делать это удобно и элегантно? Бери imgproxykit
Наш брат Александр Кондратьев (могли видеть его на подкасте) сделал свой первый личный опенсурс проект - imgproxykit - библиотека для сборки URL к imgproxy
👉 https://github.com/kondratevdev/imgproxykit
Если не сталкивались с imgproxy: это сервер на Go (перспективный востребованный ЯР) для обработки изображений. Формируешь для него ссылку с набором параметров обработки и оригиналом - получаешь картинку нужно размера, качества и формата.
imgproxykit позволяет описать параметры python-кодом:
from imgproxykit import Client, Transform from imgproxykit.options import Gravity, Resize
# Адрес imgproxy сервера client = Client('https://imgproxy.example.com')
thumbnail = Transform( # Составные параметры - объектами опций Resize(width=300, height=300, mode='fill'), Gravity(position='sm'), # Простые через kwargs или такими же объектами quality=80, # То же самое, что Quality(80) format='webp', # То же самое, что Format('webp') )
# Собираем ссылку 300×300 в WebP url = client.url( source='https://example.com/cat.jpg', transform=thumbnail, )
А если одна картинка нужна в нескольких размерах, есть variants.
# Общий трансформ для всех вариантов base = Transform(quality=85, format='webp')
products = { 'small': Transform(*base.options, width=320), 'medium': Transform(*base.options, width=640), 'large': Transform(*base.options, width=1280), }
# По одной ссылке на каждый вариант urls = client.variants( source='https://example.com/backpack.jpg', variants=products, )
small_url = urls['small'] large_url = urls['large']
Что ещё есть: • Подпись ссылок • Поддержка пресетов, настроенных на стороне imgproxy • Интеграция с Django • Интеграция с FastAPI
Планируется: • Поддержать DRF, Litestar • srcset • Валидация параметров опций
Библиотека полностью типизирована: mypy, pyright, ty, pyrefly в strict моде
Буду рад, если дадите Саше фидбек по API. А еще обязательно ставим звёздочки, кидаем багрепорты и становимся контрибуторами (PR, в отличие от Litestar пока открыты 🌚)!