Оптимизация (сжатие) изображения с использованием API reSmush.it через Python3

Camera photo

Рано или поздно человек работающий в сфере WEB разработки (да и не только) сталкивается с тем, что нужно оптимизировать изображения.

Если нужно оптимизировать несколько изображений — то можно сделать это онлайн, ручками. Но если у вас много изображений и их количество увеличивается — тогда, вам поможет данный Python скрипт, который использует API сервиса — reSmush.it

На просторах интернета найти живой пример для работы данного сервиса с Python — Нет. Не долго думая, я решил набросать рабочий код основываясь на их документации. И вот что получилось:

import os
import json
import urllib.request
import requests


def compres(file):
    # Ссылка на api.resmush.it
    url = 'http://api.resmush.it/?qlty=80'
    
    # Открываем картинку
    with open(file, 'rb') as f:
        # Передаем POST запрос с картинкой через API
        r = requests.post(url, files={'files': f})
        
        # Переводим все в JSON
        res = json.loads(r.text)
        
        # Указываем название картинки после оптимизации
        new_name = file.replace(file[file.find('.'):], '-compress' + file[file.find('.'):])
        
        # Сохраняем картинку по тому же адресу, где и старая, но с новым именем
        urllib.request.urlretrieve(res['dest'], new_name)

if __name__ == "__main__":
    # Выбираем картинку
    image = '/home/darkmedia/photo.png'
    
    # Узнаем её размер
    get_size_of_image = round(float(os.path.getsize(image) / 1024 / 1024), 1)

    # Если размер меньше 5МБ - тогда продолжаем
    if get_size_of_image <= float(4.9):
        compres(image)

Все что вы должны знать:

  1. Размер загружаемых файлов должен быть меньше 5 мегабайт.
  2. Ссылка на файл должна присваиваться переменной image, у меня это image = '/home/darkmedia/photo.png'
  3. Вы можете закинуть код из if __name__ == «__main__ в цикл и начать перебирать изображения из папки на вашем компьютере.
  4. Если вы хотите сохранять изображения в отдельную папку, просто создайте её перед переменной new_name и добавьте путь в переменную new_name.
  5. Качество фото задается в URL параметром qlty=. В нашем случае — это 80% Вот размер файла до сжатия:

Image before compress

Вот размер файла после сжатия:

Image after compress

comments powered by Disqus