Jump to content

Оптимизация изображений


Recommended Posts

Сегодня мы будем оптимизировать изображения из папки /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 ну и потом ставим в крон

Link to post
Share on other sites

вы бы еще пост свой от html тегов оптимизировали. а то читать ужасно

Мишаня, я писал пост вручную здесь, ни откуда не копировал

Link to post
Share on other sites

Мишаня, я писал пост вручную здесь, ни откуда не копировал

 

так я ж не говорю что копировали, посмотрите просто форум не читает html теги. и выглядит не очень

Link to post
Share on other sites

так я ж не говорю что копировали, посмотрите просто форум не читает html теги. и выглядит не очень

тут дело в другом, проблема на форуме

 

 

Переписал.

Edited by xavior
Link to post
Share on other sites
  • 2 weeks later...

Спасибо большое за идею!

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

В принципе это не беда, тут главное идея! Кстати, я попробовал, если несколько раз пропускать изображение через shrink, оно становится все меньше и меньше :)

 

Нашел удобный и просто класс https://github.com/mike183/PHP-TinyPNG

Старый, но работает :) может кому пригодится.

 

Как вариант пока для себя рассматриваю следующие:

1. Грохнуть все файлы в папке products и далее переделать скрипт так, что бы он при запуске отталкивался от даты последнего запуска и модифицировал только новые файлы.

2. Искать как find -perm 644 и далее после модификации менять на 664 (правильно ли это будет?)

 

Так же в заголовках есть Compression-Count: отвечающий за кол-во уже выполненных квантований изображения. Можно нагенерить себе с десяток ключей и менять их, когда счетчик подходит к концу.

Link to post
Share on other sites

Спасибо большое за идею!

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

В принципе это не беда, тут главное идея! Кстати, я попробовал, если несколько раз пропускать изображение через shrink, оно становится все меньше и меньше :)

 

Нашел удобный и просто класс https://github.com/mike183/PHP-TinyPNG

Старый, но работает :) может кому пригодится.

 

Как вариант пока для себя рассматриваю следующие:

1. Грохнуть все файлы в папке products и далее переделать скрипт так, что бы он при запуске отталкивался от даты последнего запуска и модифицировал только новые файлы.

2. Искать как find -perm 644 и далее после модификации менять на 664 (правильно ли это будет?)

 

Так же в заголовках есть Compression-Count: отвечающий за кол-во уже выполненных квантований изображения. Можно нагенерить себе с десяток ключей и менять их, когда счетчик подходит к концу.

PHP скрипт тоже не плох, мне проще было поставить sh на крон и его редактировать.

Думаю чтоб ничего не логировать, проще по правам искать и менять как вы написали в п.2

Link to post
Share on other sites

Стала очень интересной данная тема и решил наваять квантователь изображений на PHP

За основу был взят класс указанный мной выше.

 

И так, что умеем:

1. Умеем работать только из консоли (CLI)

2. Умеем работать со списком API ключей, берем из файла и перебираем. Если один ключ закончился, берем следующий. Если все закончились - прекращаем работу!

3. Умеем формировать лог в CSV для дальнейшего удобного анализа в Excel

 

Как пользоваться?

1. Качаем архив https://cloud.mail.ru/public/DUwb/RWu3fywXZ

2. Распаковываем содержимое в корень Симплы

3. В файле keys.txt суем свои API ключи (каждый ключ новой строкой)

4. Даем права на выполнение: chmod +x tinify.php

5. При необходимости правим в файле tinify.php первой строкой путь к PHP:

#!/usr/bin/php

6. Запускаем: ./tinify.php <path>

Где <path> это путь к каталогу, относительно расположения скрипта, в котором необходимо обработать изображения. 

Например, если вы поместили папку со скриптом в корень симплы и необходимо обработать каталог products с изображениями товаров, то запускаем так: ./tinify.php ../files/products

7. Запуск: ./tinify.php -h выведет хелп

 

Принцип работы с ключами

Скрипт читает keys.txt и берет от туда ключи. При запуске берет первый ключ, пробуем им работать, если все ок, переходит к следующему найденному изображению в каталоге. Если обработка изображения не прошла, меняет ключ на следующий и пробует опять этот же файл с изображением. Если не один из приведенных ключей более не может работать, работа скрипта завершается с уведомлением в консоле. 

 

Принцип работы оптимизатора

Скрипт ищет в каталоге, который был указан ему при запуске, все файлы изображений jpg, jpeg, png. Скрипт проверяет наличие в этом каталоге подкаталога .tinypng и если такого нет - создает. Для каждого найденного файла с изображением скрипт ищет файл с аналогичным именем + окончанием .tiny в подкаталоге .tinypng. Если такой файл найден, скрипт читает его содержимое. В нем хранится размер изображение (число в байтах). Если такого файла в подкаталоге .tinypng нет, или размер изображения в нем меньше фактического файла с изображением, то происходит сжатие файла. Новый сжатый файл заменяется старым, так же в подкаталоге .tinypng создается (или перезаписывается) файл с аналогичным названием + окончание .tiny где указывается новый размер сжатого файла.

Тем самым, с каждым запуском скрипта обработке поддаются только те файлы, которые ранее не сжимались.

По окончании работы скрипта создается подробный лог файл в CSV для удобного анализа в Excel

 

Скорость работы скрипта на моем тестовом хосте ~50 изображений в минуту.

Link to post
Share on other sites
  • 1 year later...

Сегодня мы будем оптимизировать изображения из папки /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 ну и потом ставим в крон

 

Привет помоги пожалуйста как его запустить?

Link to post
Share on other sites
  • 1 year later...

Можно десятками способов. 

Если у Вас нет знаний предмета и знакомства с внутренней технологией работы Simpla с изображениями, просто и легко вряд ли что-то путное выйдет...

К тому же если будете нарезать "на лету", то на размер originals это не повлияет. Но может создать другие проблемы.

 

Самое простое и доступное - обрабатывать фото ПЕРЕД  загрузкой.

Link to post
Share on other sites

А я использую сервис https://optipic.io/ru/
Он легко подключается к сайту и делает все за меня.
Никаких скриптов не нужно в кроне ставить. Система даже сама отслеживает появление новых картинок и сразу же их сжимает.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...