ФорумПрограммированиеPHP для идиотов → Ресайз больших фото

Ресайз больших фото

  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 19 мая 2016 г. 23:46, спустя 18 минут 41 секунду

    @nuklon, проконсультирую по скайпу за 1000 рублей

    не всё полезно, что в swap полезло
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 20 мая 2016 г. 3:32, спустя 3 часа 46 минут 42 секунды

    Короче все понятно, готовое решение на чистом Nginx это очень сложно для понимания.
    Я решение сравнивал с PIL по скорости, думаю php+GD или php+ImageMagick не сильно будут быстрее того же PIL. Nginx быстрее в раз 10
    Но ТС просто не осилит использовать Nginx, зато амбиции авито

    Спустя 83 сек.

    
    http {
    
        # Укажите необходимый путь до каталога кеша, имя кеша и максимальный размер кеша
        proxy_cache_path <STORAGE_ROOT>/nginx/cache levels=1:2 keys_zone=<CACHE_NAME>:10m max_size=1G;
    
        # Теперь настроим сервер, который будет кешировать результаты
        server {
            listen 80;
            server_name www.example.org;
    
            location ~* ^/(resize|crop)/ {
                proxy_pass http://image.example.org$request_uri;
                proxy_cache <CACHE_NAME>;
                proxy_cache_key "$host$document_uri";
                proxy_cache_valid 200 1d;
                proxy_cache_valid any 1m;
                proxy_cache_use_stale error timeout invalid_header updating;
            }
        }
    
        # И сервер, который будет выполнять resize и crop
        server {
            listen 80;
            server_name image.example.org;
    
            location ~* ^/resize/([\d\-]+)/([\d\-]+)/(.+)$ {
                alias <STORAGE_ROOT>/$3;
                image_filter resize $1 $2;
                image_filter_buffer 2M;
                error_page 415 = /empty;
            }
    
            location ~* ^/crop/([\d\-]+)/([\d\-]+)/(.+)$ {
                alias <STORAGE_ROOT>/$3;
                image_filter crop $1 $2;
                image_filter_buffer 2M;
                error_page 415 = /empty;
            }
    
            location = /empty {
                empty_gif;
            }
        }
    }
    

    Спустя 67 сек.

    После чего делаешь запрос на

    http://www.example.org/resize/200/120/my.png
    и получаешь в нужном размере картинку
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 20 мая 2016 г. 4:23, спустя 50 минут 20 секунд

    @adw0rd, будь проще! Вот готовое решение от всех бед на nginx основаное на моем конфиге :)

    fredpalmer/dimwit [github.com]

    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 20 мая 2016 г. 5:06, спустя 43 минуты 1 секунду

    @phpdude, да пофиг, дело ТС

    adw/0
  • nuklon

    Сообщения: 15 Репутация: N Группа: Кто попало

    Spritz 20 мая 2016 г. 10:27, спустя 5 часов 21 минуту 50 секунд

    нет же ))) формируй ссылку на настоящую превьюшку как если бы она существовала.

    @artoodetoo, Спасибо за минуты жизни. Но это я понял уже на 2-ой еще странице. Вопрос в другом: Вместо "Спасибо, фото загружено" я хочу вывести саму только что загруженную картинку, там же, в этой же форме, бля, ну как на авито или в Я.Почте когда прикрепляешь файлы (нет, это не значит, что я делаю 2-ой авито или яндекс). Т.е, юзер загрузил.. пошел прогрессбар и как только загрузился вывести положительный результат в виде этой самой картинки. Не потом, когда какой-нибудь хер обратится к этой картинке или странице с картинкой, а сейчас этому же пользователю... фух..

    Теперь по поводу nginx. Друзья, с этим зверем никогда дело не имел. Код, который показали в принципе понятен, но не понятно куда именно это вписать и прикрутить, получится ли эти действия в Денвере (если да, то где).
    И нужны ли какие-нибудь требования к хостингу?

    @master, не заработал же еще, ыы

    pi+
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 20 мая 2016 г. 11:10, спустя 42 минуты 6 секунд

    "нет я всё понял, но что конкретно? что ты имела в виду?" :D

    ιιlllιlllι унц-унц
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 20 мая 2016 г. 13:51, спустя 2 часа 41 минуту 40 секунд

    денвер аккуратно удали, поставь nginx+php-fpm и стань на голову выше себя
    лучше конечно попробовать linux, но я многое прошу, знаю

    adw/0
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 20 мая 2016 г. 14:17, спустя 25 минут 29 секунд

    ох, денвер

    не всё полезно, что в swap полезло
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 20 мая 2016 г. 18:33, спустя 4 часа 16 минут 23 секунды

    ох, денвер

    @master, вот она и проблема нашлась))

    Сапожник без сапог
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 20 мая 2016 г. 19:05, спустя 32 минуты 11 секунд

    @phpdude, приучает к плохому

    не всё полезно, что в swap полезло
  • nuklon

    Сообщения: 15 Репутация: N Группа: Кто попало

    Spritz 20 мая 2016 г. 23:53, спустя 4 часа 47 минут 21 секунду

    денвер аккуратно удали, поставь nginx+php-fpm и стань на голову выше себя

    @adw0rd,

    ох, денвер

    @master, зато быстро) До переустановки у меня стоял php+apache руками собранный, но щас у меня конкретная задача и ибаться с серверами не предполагал. А тут еще и nginx подсовываете. Нельзя ли то же самое на апаче сделать?

    Небольшая эврика! Если делать ресайз не при загрузке, а при выводе, то результат выдается быстрее. Например, гружу 4 фото, ресайз 4-го фото при загрузке завершается за 15 сек. А если только загрузить, а при выводе превьюшек (там же, а не потом где-нибудь на сайте), в таком виде -

    <img src="preview.php?path=' + options.path + data.file + '&h=100">
    , то вся работа заканчивается за 5-6 сек. Не айс конечно, но не так ужасно как при загрузке.
    pi+
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 20 мая 2016 г. 23:55, спустя 2 минуты 8 секунд

    зато быстро

    @nuklon, оно и видно

    не всё полезно, что в swap полезло
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 21 мая 2016 г. 12:16, спустя 12 часов 20 минут 58 секунд

    @nuklon, извини, не шарю в современных технологиях типа денвера, апача и пхп
    они слишком сложны для меня

    adw/0
  • nuklon

    Сообщения: 15 Репутация: N Группа: Кто попало

    Spritz 24 мая 2016 г. 17:44, спустя 3 дня 5 часов 28 минут

    Мужуки, сделал как советовали.. короч, установил по человечески апач+пхп (nginx вместо апача не хочу устанавливать, а совместно.. щас не до этого), ресайзю при обращении, а при загрузке миниатюры делаю канвасом (в принципе, главный вопрос в этом и был, как вывести миниатюры сразу же.., ну да хуй с ним).
    Такой вопрос, при выводе миниатюр при обращении так:

    <img src="<?=$_SITE['thumb']->thumb('uploads/ob/1.jpg', '200x200', [ 'wm' => 'i/wm.png' ])?>">
    проверяется есть ли в соответствующей папке файл, если есть вывожу, иначе строю путь и сохраняю. На хабре почитал, что сервер может отдать изображение не обращаясь к скрипту:
    для апача такой код

    RewriteCond %{REQUEST_URI} ^(/static/)
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^(.*)$ thumb.php?file=$1 [L]
    при этом файлы хранятся по такому пути
    /static/d1/7e/d17e248758722c42d8c88d21d8b538d7.jpg
    . Тута - Простое решение для обработки изображений на лету с кешированием результата [habrahabr.ru]

    Как то же самое сделать, если у меня миниатюры распределяются так:


    uploads/ob/thumbs/0x200/1.jpg
    где uploads/ob/ - параметр, файл тоже, а thumbs/0x200/ - папка для переданного размера, в папке миниатюр
    ?
    pi+
  • nuklon

    Сообщения: 15 Репутация: N Группа: Кто попало

    Spritz 24 мая 2016 г. 18:33, спустя 48 минут 12 секунд

    Да, забыл добавить.. на хабре решение практически такое же как и здесь отвечали, тока на нгинксе + еще @artoodetoo похожее выкладывал на апаче, но у меня решение другое - нет отдельного файла куда передаются открыто (мусорить смогут негодяи) параметры и этот файл как-то в конфиге сервера настраивается

    pi+

Пожалуйста, авторизуйтесь, чтобы написать комментарий!