10 строк кода Python, пакетное сжатие 500 изображений просто слишком мощно

Python
10 строк кода Python, пакетное сжатие 500 изображений просто слишком мощно

Эта статья является оригинальной и впервые опубликована в публичном аккаунте【Питон кот], пожалуйста, не перепечатывайте без разрешения. Оригинальный адрес:Tickets.WeChat.QQ.com/Yes/5HP FD Оценочная CP…

Читатели, знакомые с "Python Cat", должны знать, что во всех статьях, которые я публикую, Brother Cat, используются очень характерные изображения - в исходной статье используется изображение кота, а в перепечатанной статье - изображение собаки, за очень немногими исключениями.

В последние несколько дней я создаю личный веб-сайт со страницей Github + hexo, Чтобы продолжить стиль, я хочу перенести изображения и статьи вместе. В настоящее время есть проблема: все изображения, которые я использую, являются большими изображениями высокой четкости, что серьезно замедляет скорость загрузки, когда я размещаю их на веб-сайте. Поэтому вам необходимо сжать изображение перед загрузкой.

Резюмирую требования следующим образом:

  • Нужно сжимать картинки пачками, их около 200 и будут добавлены позже
  • Именно сжатие, а не вырезание и перехват, и не изменяет размер картинки
  • Размер большинства исходных изображений составляет 10–30 Мп, цель состоит в том, чтобы сжать их до размера менее 1 М, чем меньше, тем лучше.

Следуя этим подсказкам, я искал "пакетное сжатие изображений", "инструмент сжатия изображений", "пакетное сжатие изображений"...

Первоначальная идея заключалась в том, чтобы найти легковесный инструмент для сжатия изображений и просто разобраться с ним. Однако я не знаю, то ли это неправильный способ поиска, то ли неправильный способ фильтрации и фильтрации информации, но результаты не очень популярны.

Найденные инструменты локальные и онлайновые, но после тестирования они не идеальны: какое-то программное обеспечение оплачивается после скачивания, какое-то напрямую вызывает зависание программы при его использовании, а какое-то имеет недостаточную степень сжатия и требует многократного сжатия. исходный размер изображения должен быть не более 5M, некоторые требуют пакетной обработки не более 20 изображений, а некоторые не поддерживают пакетное сжатие... Небольшие партнеры в группе также помогли порекомендовать "PS + пакетная обработка", acdsee, мобильное приложение snapseed мне не нравится.

Потратив много времени, я наткнулся на статью, в которой используется Python для сжатия изображений. Текст будит сновидца, почему я до него не додумался?

Сначала посмотрите, как это делают другие. Это «Как разумно сжимать изображения в пакетном режиме с помощью Python?» "(zhuanlan.zhihu.com/p/32246003) Статья знакомит с методом использования модуля Image библиотеки PIL для сжатия изображений, в основном путем настройки длины и ширины изображения.

PIL — это мощная библиотека для обработки изображений, но она поддерживает только Python 2 и уже давно не поддерживается. Некоторые разработчики улучшали и поддерживали Pillow на его основе, поддерживая Python 3. Слышал раньше, никогда не пользовался. Итак, Brother Cat проверил несколько руководств и документов. Прочитав его, я обнаружил, что его метод сжатия картинок — это в основном пропорциональное масштабирование, обрезка и изменение формата и т. д., чего я не хочу.

Еще видел статью "Как уменьшить картинки без потерь"(nuggets.capable/post/684490…), в которой представлены три стратегии оптимизации изображений с Yelp (крупнейшего сайта обзоров в США): подушка, динамическая настройка и замена кодировщика. Некоторые методы очень высокого уровня и должны иметь передовой опыт в отрасли, но он надеется, что изображение будет без потерь, и все методы могут уменьшить размер изображения в среднем на 30%, поэтому он не соответствует моим требованиям. Кроме того, он расширил и внедрил несколько методов, но на изучение ушло время, поэтому я сдался.

В итоге я наконец-то нашел очень удобное и очень удовлетворяющее решение, и перейдем к делу. (Не думайте, что я многословен, процесс исследования тоже очень интересен) (Тссс, на самом деле, потому что метод, который будет представлен ниже, слишком прост, всего несколько строк кода, я не могу помочь а заставить...)

---------------- Аккуратная разделительная линия ---------------

Веб-сайт Tinypng предоставляет онлайн-сервис сжатия изображений, который является одним из лучших среди всех инструментов сжатия изображений, но у него есть ограничения: он может обрабатывать до 20 изображений в пакетном режиме, а размер каждого изображения не может превышать 5M.

Этот веб-сайт очень добросовестный и открыл бесплатный API, который отменяет ограничение размера каждого изображения и ограничивает обработку только 500 изображений в месяц. Этого более чем достаточно для меня.

Вот как это использовать. Первый шаг — зарегистрироваться на его сайте и получить эксклюзивный API_KEY. Зарегистрироваться с адресом электронной почты очень просто.

Затем установите пакет:

pip install --upgrade tinify

Далее идет обработка изображения:

import tinify
import os

tinify.key = '此处填入你的key'
path = "C:\\Users\\yunpoyue\\Pictures\\cat" # 图片存放的路径

for dirpath, dirs, files in os.walk(path):
    for file in files:
        imgpath = os.path.join(dirpath, file)
        print("compressing ..."+ imgpath)
        tinify.from_file(imgpath).to_file(imgpath)

Менее 10 строк кода, легко сжимать картинки пакетно, это не слишком круто! 20-мегапиксельное изображение может быть сжато до 2-мегапиксельного, а степень сжатия достигает поразительных 90%, и результат радует.

Его API также предоставляет такие функции, как обрезка изображений, нанесение водяных знаков и сохранение сжатых изображений для поставщиков облачных услуг (Amazon Cloud, Google Cloud), которые являются очень мощными. За исключением того, что процесс сжатия немного медленный, остальное безупречно.

После некоторых исследований и сравнений я определил, что это лучшее решение на данный момент, поэтому я решительно делюсь им с вами.

публика【Питон кот], в этом выпуске публикуется серия высококачественных статей, в том числе серия Meow Star Philosophy Cat, расширенная серия Python, серия рекомендаций по хорошим книгам, технические статьи, высококачественные рекомендации и перевод на английский язык и т. д. Добро пожаловать, обратите внимание. Закулисный ответ"люблю учиться” и получите бесплатный обучающий пакет.