Back to blog

Как использовать Deflato API: руководство для разработчиков

Зачем нужен API для сжатия изображений?

Ручное сжатие не масштабируется. Если приложение обрабатывает пользовательские загрузки, генерирует миниатюры, работает с каталогами товаров или собирает статические сайты — нужна программная оптимизация. API позволяет сжимать, масштабировать и конвертировать изображения в рамках CI/CD, serverless-функций, CMS-вебхуков или фоновых задач.

Deflato API — простой REST-интерфейс. Входные форматы: JPEG, PNG, WebP, AVIF, HEIC, TIFF, PDF. Выходные: JPEG, WebP, AVIF.

Получение API-ключа

  1. Создайте аккаунт на deflato.com.
  2. Перейдите в Settings → API.
  3. Нажмите Generate API Key и скопируйте ключ.
  4. Храните ключ в переменных окружения (DEFLATO_API_KEY), не в коде.

Бесплатный план — 100 API-сжатий в месяц. Pro и Team — больше.

Основы API: примеры cURL

Единый эндпоинт:

POST https://deflato.com/api/v1/compress

Принимает multipart/form-data.

Базовое сжатие

curl -X POST https://deflato.com/api/v1/compress   -H "Authorization: Bearer $DEFLATO_API_KEY"   -F "file=@photo.jpg"   --output compressed.jpg

По умолчанию: тот же формат, quality 80, без масштабирования, EXIF удалён.

Конвертация формата

curl -X POST https://deflato.com/api/v1/compress   -H "Authorization: Bearer $DEFLATO_API_KEY"   -F "file=@photo.jpg"   -F "output_format=WEBP"   -F "quality=80"   --output photo.webp

Масштабирование + сжатие

curl -X POST https://deflato.com/api/v1/compress   -H "Authorization: Bearer $DEFLATO_API_KEY"   -F "file=@photo.jpg"   -F "output_format=AVIF"   -F "quality=70"   -F "max_dimension=1920"   --output photo.avif

HEIC → JPEG

curl -X POST https://deflato.com/api/v1/compress   -H "Authorization: Bearer $DEFLATO_API_KEY"   -F "file=@IMG_1234.heic"   -F "output_format=JPEG"   -F "quality=85"   --output photo.jpg

Справочник параметров

Параметр Тип По умолчанию Описание
file File обязательный Файл изображения (JPEG, PNG, WebP, AVIF, HEIC, TIFF, PDF)
output_format String Как на входе Выходной формат: JPEG, WEBP, AVIF
quality Integer 80 Качество сжатия (1–100)
max_dimension Integer 0 (без масштабирования) Макс. ширина или высота в px (пропорционально)
strip_exif Boolean true Удалить EXIF/метаданные

Python SDK

pip install deflato

Базовое использование

import deflato

client = deflato.Client(api_key="YOUR_API_KEY")

result = client.compress(
    "photo.jpg",
    output_format="WEBP",
    quality=80,
    max_dimension=1920
)
result.save("photo.webp")

print(f"Original: {result.original_size / 1024:.0f} KB")
print(f"Compressed: {result.compressed_size / 1024:.0f} KB")
print(f"Savings: {result.savings_percent:.1f}%")

Пакетная обработка

import deflato
from pathlib import Path

client = deflato.Client(api_key="YOUR_API_KEY")

input_dir = Path("./images")
output_dir = Path("./optimized")
output_dir.mkdir(exist_ok=True)

for image_path in input_dir.glob("*.jpg"):
    result = client.compress(
        str(image_path),
        output_format="WEBP",
        quality=80
    )
    result.save(output_dir / f"{image_path.stem}.webp")
    print(f"{image_path.name}: {result.savings_percent:.1f}% saved")

Интеграция с Django

import deflato
from django.core.files.base import ContentFile

client = deflato.Client(api_key=settings.DEFLATO_API_KEY)

def optimize_upload(instance, **kwargs):
    if instance.image:
        result = client.compress(
            instance.image.path,
            output_format="WEBP",
            quality=80,
            max_dimension=1600
        )
        instance.image.save(
            f"{instance.image.name.rsplit('.', 1)[0]}.webp",
            ContentFile(result.content),
            save=False
        )

Node.js SDK

npm install deflato

Базовое использование

const Deflato = require('deflato');
const fs = require('fs');

const client = new Deflato({ apiKey: process.env.DEFLATO_API_KEY });

async function compressImage() {
  const result = await client.compress('./photo.jpg', {
    outputFormat: 'WEBP',
    quality: 80,
    maxDimension: 1920
  });

  fs.writeFileSync('./photo.webp', result.buffer);

  console.log(`Original: ${(result.originalSize / 1024).toFixed(0)} KB`);
  console.log(`Compressed: ${(result.compressedSize / 1024).toFixed(0)} KB`);
  console.log(`Savings: ${result.savingsPercent.toFixed(1)}%`);
}

compressImage();

Пакетная обработка с контролем параллелизма

const Deflato = require('deflato');
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const glob = promisify(require('glob'));

const client = new Deflato({ apiKey: process.env.DEFLATO_API_KEY });

async function batchCompress(inputDir, outputDir, concurrency = 5) {
  const files = await glob(`${inputDir}/*.{jpg,png,jpeg}`);
  fs.mkdirSync(outputDir, { recursive: true });

  for (let i = 0; i < files.length; i += concurrency) {
    const batch = files.slice(i, i + concurrency);
    const results = await Promise.all(
      batch.map(async (file) => {
        const result = await client.compress(file, {
          outputFormat: 'WEBP',
          quality: 80
        });
        const outPath = path.join(
          outputDir,
          path.basename(file, path.extname(file)) + '.webp'
        );
        fs.writeFileSync(outPath, result.buffer);
        return { file: path.basename(file), savings: result.savingsPercent };
      })
    );
    results.forEach(r =>
      console.log(`${r.file}: ${r.savings.toFixed(1)}% saved`)
    );
  }
}

batchCompress('./images', './optimized');

MCP-сервер

Deflato предоставляет MCP-сервер (Model Context Protocol), позволяющий AI-ассистентам сжимать изображения в рамках автоматизированных рабочих процессов.

{
  "mcpServers": {
    "deflato": {
      "command": "npx",
      "args": ["-y", "deflato-mcp-server"],
      "env": {
        "DEFLATO_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

После настройки AI-ассистент может вызывать инструменты Deflato для сжатия, конвертации и масштабирования — без ручных API-вызовов.

Обработка ошибок

Стандартные HTTP-коды:

  • 200 — успех, тело ответа — сжатое изображение.
  • 400 — неверный запрос (невалидный формат, quality вне диапазона).
  • 401 — неавторизован (ключ отсутствует или отозван).
  • 413 — файл слишком большой.
  • 429 — превышен rate limit. Повторите с экспоненциальным backoff.
  • 500 — ошибка сервера. Повторите запрос.
import deflato

client = deflato.Client(api_key="YOUR_API_KEY")

try:
    result = client.compress("photo.jpg", output_format="WEBP", quality=80)
    result.save("photo.webp")
except deflato.AuthenticationError:
    print("Invalid API key")
except deflato.RateLimitError as e:
    print(f"Rate limited. Retry after {e.retry_after} seconds")
except deflato.FileTooLargeError:
    print("File exceeds the maximum upload size")
except deflato.APIError as e:
    print(f"API error: {e.message}")

Лимиты и тарифы

План API-сжатий / мес. Макс. файл Rate limit
Free 100 10 МБ 10 req/min
Pro 10 000 50 МБ 60 req/min
Team 100 000 100 МБ 300 req/min
Enterprise Custom Custom Custom

Проверка текущего потребления:

curl https://deflato.com/api/v1/usage   -H "Authorization: Bearer $DEFLATO_API_KEY"
{
  "plan": "pro",
  "compressions_used": 1847,
  "compressions_limit": 10000,
  "period_ends": "2026-04-01T00:00:00Z"
}

Лучшие практики

  • Кэшируйте результаты — не сжимайте одно изображение дважды.
  • Переменные окружения для API-ключа — никогда не коммитьте ключи.
  • Retry с backoff для ответов 429 и 500.
  • Таймаут — 30 с для больших файлов.
  • Сжимайте при загрузке, а не по запросу — избегайте задержки на каждый запрос пользователя.
  • Мониторьте потребление через /usage.

Заключение

Deflato API превращает оптимизацию изображений из ручной задачи в автоматический шаг пайплайна. Загрузите изображение, укажите параметры — получите оптимизированный результат. Начните с cURL-примеров, затем подключите Python или Node.js SDK для продакшена.

Try Deflato — compress your images for free

Reduce file sizes by up to 90% with no visible quality loss. Supports JPEG, PNG, WebP, AVIF, PDF, and Office documents.

Compress Images Now