Перейти к содержанию
Официальный форум поддержки Simpla

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


Рекомендуемые сообщения

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

 

 

Переписал.

Изменено пользователем xavior
Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

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

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

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

 

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

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

 

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

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

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

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

 

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

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

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

 

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

Стала очень интересной данная тема и решил наваять квантователь изображений на 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 изображений в минуту.

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

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

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

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

Как можно files\originals фото обрабатывать или нарезать при загрузке?

ато папка originals очень много весит.

http://nginx.org/ru/docs/http/ngx_http_image_filter_module.html

 

https://habrahabr.ru/post/77873/

Изменено пользователем DaVinci
Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...