xavior Posted August 8, 2015 Report Share Posted August 8, 2015 Сегодня мы будем оптимизировать изображения из папки /products/, не originals!! т.к. они идут уже отрендеренные под определенные размеры и будем это делать с помощью Tinypng.com сервиса. Данная манипуляция позволила в Google Speed Page мне набрать +17 баллов и приблизив меня к отметке 89/100 (изначально было 57/100) Мы будем использовать баш скрипт и ставить его на выполнение 1 раз в неделю по крону. Предусловия: 1. у меня пользователь назывется user1 2. файлы в папке products создаются под пользователем apache 3. нужно установить JQ - apt-get install jq или yum install jq Код tiny.sh скрипта c комментариями: #!/bin/bash # Получаем API ключ на сайте https://tinypng.com/developers. # Бесплатно имеем 500 запросов в месяц. Пока тестируем можем брать # сколько угодно ключей на разные почтовые ящики. API_KEY="CHANGE_ME" if [ $API_KEY = "CHANGE_ME" ] then echo "CHANGE THE API_KEY in this file." exit 1 fi if ! type "jq" > /dev/null then echo "Please install `jq`" exit 1 fi # Указываем полный серверный путь до папки products # И делаем поиск всех изображений с владельцем apache find /var/www/user1/data/www/site.com/files/products -group apache -type f \( -name \*.jpg -o -name \*.png -o -name \*.jpeg \) -print0 | while IFS= read -r -d '' file; do json=$(curl -sS --user api:$API_KEY --data-binary @$file https://api.tinypng.com/shrink) url=$(jq -n "$json.output.url" | sed -e 's/^"//' -e 's/"$//') curl -sS $url > $file # Устанавливаем на файл права пользователя user1 chown user1:user1 $file done # Ищем и удаляем файлы которые меньше 1кб (значит не сконвертировались) # соответственно они сами пересоздадутся с пользователем apache find /var/www/user1/data/www/site.com/files/products -group user1 -type f -size -1k -delete Что делает скрипт: 0. Беслатный лимит обработки 500 изображений 1. Обрабатывает всех изображения с пользователем apache 2. Оптимизирует и сохраняет с пользователем user1 3. При следующих обращениях не трогает уже оптимизированные файлы! Для моих нужд слихвой подходит Для теста запускаем sh tiny.sh ну и потом ставим в крон Quote Link to post Share on other sites
mishanya Posted August 8, 2015 Report Share Posted August 8, 2015 вы бы еще пост свой от html тегов оптимизировали. а то читать ужасно Quote Link to post Share on other sites
xavior Posted August 8, 2015 Author Report Share Posted August 8, 2015 вы бы еще пост свой от html тегов оптимизировали. а то читать ужасноМишаня, я писал пост вручную здесь, ни откуда не копировал Quote Link to post Share on other sites
mishanya Posted August 8, 2015 Report Share Posted August 8, 2015 Мишаня, я писал пост вручную здесь, ни откуда не копировал так я ж не говорю что копировали, посмотрите просто форум не читает html теги. и выглядит не очень Quote Link to post Share on other sites
xavior Posted August 8, 2015 Author Report Share Posted August 8, 2015 (edited) так я ж не говорю что копировали, посмотрите просто форум не читает html теги. и выглядит не оченьтут дело в другом, проблема на форуме Переписал. Edited August 8, 2015 by xavior Quote Link to post Share on other sites
Gloobus Posted August 23, 2015 Report Share Posted August 23, 2015 Спасибо большое за идею!Очень классный сервис. Единственное, у меня изображения не под пользователем apache формируются, а под тем пользователем, под которым он запущен.В принципе это не беда, тут главное идея! Кстати, я попробовал, если несколько раз пропускать изображение через shrink, оно становится все меньше и меньше Нашел удобный и просто класс https://github.com/mike183/PHP-TinyPNGСтарый, но работает может кому пригодится. Как вариант пока для себя рассматриваю следующие:1. Грохнуть все файлы в папке products и далее переделать скрипт так, что бы он при запуске отталкивался от даты последнего запуска и модифицировал только новые файлы.2. Искать как find -perm 644 и далее после модификации менять на 664 (правильно ли это будет?) Так же в заголовках есть Compression-Count: отвечающий за кол-во уже выполненных квантований изображения. Можно нагенерить себе с десяток ключей и менять их, когда счетчик подходит к концу. Quote Link to post Share on other sites
xavior Posted August 23, 2015 Author Report Share Posted August 23, 2015 Спасибо большое за идею!Очень классный сервис. Единственное, у меня изображения не под пользователем apache формируются, а под тем пользователем, под которым он запущен.В принципе это не беда, тут главное идея! Кстати, я попробовал, если несколько раз пропускать изображение через shrink, оно становится все меньше и меньше Нашел удобный и просто класс https://github.com/mike183/PHP-TinyPNGСтарый, но работает может кому пригодится. Как вариант пока для себя рассматриваю следующие:1. Грохнуть все файлы в папке products и далее переделать скрипт так, что бы он при запуске отталкивался от даты последнего запуска и модифицировал только новые файлы.2. Искать как find -perm 644 и далее после модификации менять на 664 (правильно ли это будет?) Так же в заголовках есть Compression-Count: отвечающий за кол-во уже выполненных квантований изображения. Можно нагенерить себе с десяток ключей и менять их, когда счетчик подходит к концу.PHP скрипт тоже не плох, мне проще было поставить sh на крон и его редактировать.Думаю чтоб ничего не логировать, проще по правам искать и менять как вы написали в п.2 Quote Link to post Share on other sites
Gloobus Posted August 24, 2015 Report Share Posted August 24, 2015 Стала очень интересной данная тема и решил наваять квантователь изображений на PHPЗа основу был взят класс указанный мной выше. И так, что умеем:1. Умеем работать только из консоли (CLI)2. Умеем работать со списком API ключей, берем из файла и перебираем. Если один ключ закончился, берем следующий. Если все закончились - прекращаем работу!3. Умеем формировать лог в CSV для дальнейшего удобного анализа в Excel Как пользоваться?1. Качаем архив https://cloud.mail.ru/public/DUwb/RWu3fywXZ2. Распаковываем содержимое в корень Симплы3. В файле keys.txt суем свои API ключи (каждый ключ новой строкой)4. Даем права на выполнение: chmod +x tinify.php5. При необходимости правим в файле tinify.php первой строкой путь к PHP: #!/usr/bin/php 6. Запускаем: ./tinify.php <path>Где <path> это путь к каталогу, относительно расположения скрипта, в котором необходимо обработать изображения. Например, если вы поместили папку со скриптом в корень симплы и необходимо обработать каталог products с изображениями товаров, то запускаем так: ./tinify.php ../files/products7. Запуск: ./tinify.php -h выведет хелп Принцип работы с ключамиСкрипт читает keys.txt и берет от туда ключи. При запуске берет первый ключ, пробуем им работать, если все ок, переходит к следующему найденному изображению в каталоге. Если обработка изображения не прошла, меняет ключ на следующий и пробует опять этот же файл с изображением. Если не один из приведенных ключей более не может работать, работа скрипта завершается с уведомлением в консоле. Принцип работы оптимизатораСкрипт ищет в каталоге, который был указан ему при запуске, все файлы изображений jpg, jpeg, png. Скрипт проверяет наличие в этом каталоге подкаталога .tinypng и если такого нет - создает. Для каждого найденного файла с изображением скрипт ищет файл с аналогичным именем + окончанием .tiny в подкаталоге .tinypng. Если такой файл найден, скрипт читает его содержимое. В нем хранится размер изображение (число в байтах). Если такого файла в подкаталоге .tinypng нет, или размер изображения в нем меньше фактического файла с изображением, то происходит сжатие файла. Новый сжатый файл заменяется старым, так же в подкаталоге .tinypng создается (или перезаписывается) файл с аналогичным названием + окончание .tiny где указывается новый размер сжатого файла.Тем самым, с каждым запуском скрипта обработке поддаются только те файлы, которые ранее не сжимались.По окончании работы скрипта создается подробный лог файл в CSV для удобного анализа в Excel Скорость работы скрипта на моем тестовом хосте ~50 изображений в минуту. Quote Link to post Share on other sites
Furu Posted March 21, 2017 Report Share Posted March 21, 2017 Сегодня мы будем оптимизировать изображения из папки /products/, не originals!! т.к. они идут уже отрендеренные под определенные размеры и будем это делать с помощью Tinypng.com сервиса. Данная манипуляция позволила в Google Speed Page мне набрать +17 баллов и приблизив меня к отметке 89/100 (изначально было 57/100) Мы будем использовать баш скрипт и ставить его на выполнение 1 раз в неделю по крону. Предусловия: 1. у меня пользователь назывется user1 2. файлы в папке products создаются под пользователем apache 3. нужно установить JQ - apt-get install jq или yum install jq Код tiny.sh скрипта c комментариями: #!/bin/bash # Получаем API ключ на сайте https://tinypng.com/developers. # Бесплатно имеем 500 запросов в месяц. Пока тестируем можем брать # сколько угодно ключей на разные почтовые ящики. API_KEY="CHANGE_ME" if [ $API_KEY = "CHANGE_ME" ] then echo "CHANGE THE API_KEY in this file." exit 1 fi if ! type "jq" > /dev/null then echo "Please install `jq`" exit 1 fi # Указываем полный серверный путь до папки products # И делаем поиск всех изображений с владельцем apache find /var/www/user1/data/www/site.com/files/products -group apache -type f \( -name \*.jpg -o -name \*.png -o -name \*.jpeg \) -print0 | while IFS= read -r -d '' file; do json=$(curl -sS --user api:$API_KEY --data-binary @$file https://api.tinypng.com/shrink) url=$(jq -n "$json.output.url" | sed -e 's/^"//' -e 's/"$//') curl -sS $url > $file # Устанавливаем на файл права пользователя user1 chown user1:user1 $file done # Ищем и удаляем файлы которые меньше 1кб (значит не сконвертировались) # соответственно они сами пересоздадутся с пользователем apache find /var/www/user1/data/www/site.com/files/products -group user1 -type f -size -1k -delete Что делает скрипт: 0. Беслатный лимит обработки 500 изображений 1. Обрабатывает всех изображения с пользователем apache 2. Оптимизирует и сохраняет с пользователем user1 3. При следующих обращениях не трогает уже оптимизированные файлы! Для моих нужд слихвой подходит Для теста запускаем sh tiny.sh ну и потом ставим в крон Привет помоги пожалуйста как его запустить? Quote Link to post Share on other sites
Tamara Posted April 23, 2018 Report Share Posted April 23, 2018 Как можно files\originals фото обрабатывать или нарезать при загрузке?ато папка originals очень много весит. Quote Link to post Share on other sites
phukortsin Posted April 23, 2018 Report Share Posted April 23, 2018 Можно десятками способов. Если у Вас нет знаний предмета и знакомства с внутренней технологией работы Simpla с изображениями, просто и легко вряд ли что-то путное выйдет...К тому же если будете нарезать "на лету", то на размер originals это не повлияет. Но может создать другие проблемы. Самое простое и доступное - обрабатывать фото ПЕРЕД загрузкой. Quote Link to post Share on other sites
DaVinci Posted April 23, 2018 Report Share Posted April 23, 2018 (edited) Как можно files\originals фото обрабатывать или нарезать при загрузке?ато папка originals очень много весит.http://nginx.org/ru/docs/http/ngx_http_image_filter_module.html https://habrahabr.ru/post/77873/ Edited April 23, 2018 by DaVinci Quote Link to post Share on other sites
korols221 Posted April 30, 2018 Report Share Posted April 30, 2018 А я использую сервис https://optipic.io/ru/Он легко подключается к сайту и делает все за меня.Никаких скриптов не нужно в кроне ставить. Система даже сама отслеживает появление новых картинок и сразу же их сжимает. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.