Оптимизация (сжатие) изображения с использованием API reSmush.it через Python3
Рано или поздно человек работающий в сфере 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)
Все что вы должны знать:
- Размер загружаемых файлов должен быть меньше 5 мегабайт.
- Ссылка на файл должна присваиваться переменной image, у меня это
image = '/home/darkmedia/photo.png'
- Вы можете закинуть код из
if __name__ == «__main__
в цикл и начать перебирать изображения из папки на вашем компьютере. - Если вы хотите сохранять изображения в отдельную папку, просто создайте её перед переменной
new_name
и добавьте путь в переменнуюnew_name
. - Качество фото задается в URL параметром
qlty=
. В нашем случае — это 80% Вот размер файла до сжатия:
Вот размер файла после сжатия: