1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yanue-nginx-lua-GraphicsMagick

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

nginx-lua-GraphicsMagick

Nginx+Lua+GraphicsMagick, реализация функции изменения размера изображений по требованию, поддерживает два режима [фиксированный размер, режим фиксированной высоты или ширины], поддерживает хранение файлов с использованием FastDFS.

github адрес: https://github.com/yanue/nginx-lua-GraphicsMagick

Описание

  • Аналогично изображениям на Taobao, реализация функции изменения размера изображений по требованию, которая позволяет изменять размер изображений по добавлению суффиксов _100x100.jpg (фиксированный размер), _-100.jpg (фиксированная высота), _100-.jpg (фиксированная ширина).
  • Основная цель — размещение изображений с измененным размером в полностью независимом каталоге thumb (с возможностью изменения имени каталога), сохраняя структуру каталогов оригинальных изображений.

Обновление от 14 января 2016 года

  • Добавлен режим фиксированной высоты или ширины Структура слева направо, разделенная символом "-" (символ "-" не будет интерпретирован браузером как часть URL), например: xx.jpg_100-.jpg ширина 100, высота автоматическая xx.jpg_-100.jpg высота 100, ширина автоматическая
  • Добавлен класс PHP для динамического получения размера изображений## Обновление от 22 апреля 2016 года
  • Добавлена поддержка изменения размера изображений с параметрами query (созданы псевдо-статические перенаправления) Например: xxx.jpg?a=b&c=d_750x750.jpg или xxx.jpg?params_750x750.jpg Конечное перенаправление: xxx.jpg_750x750.jpg

Планирование каталогов

img.xxx.com (например /var/www/img)
|-- img1
|   `-- 001
|       `-- 001.jpg
|-- img2
|   `-- notfound.jpg
|-- img3
|   `-- 001
|       `-- 001.jpg

Путь к изображению после изменения размера

thumb (например /tmp/thumb, можно изменить в конфигурационном файле)
    `-- img1
        `-- 001
            |-- 001_200x160.jpg фиксированный размер
            |-- 001_-100.jpg фиксированная высота
            |-- 001_200-.jpg фиксированная ширина
  • Где img.xxx.com — корневой каталог сайта с изображениями, img1, img2... — каталоги с оригинальными изображениями.
  • Каталог с измененными размерами изображений сохраняет структуру оригинальных каталогов и может быть очищен по расписанию.#### Соответствие адресов
  • Адрес для доступа к оригинальному изображению: http://img.xxx.com/xx/001/001.jpg
  • Адрес для доступа к измененному размером изображению: http://img.xxx.com/xx/001/001.jpg_100x100.jpg (ширина 100, высота 100)
  • Адрес для автоматической ширины: http://img.xxx.com/xx/001/001.jpg_-100.jpg (символ "-" указывает на автоматическую ширину, высота 100)
  • Адрес для автоматической высоты: http://img.xxx.com/xx/001/001.jpg_100-.jpg (символ "-" указывает на автоматическую высоту, ширина 100)

Процесс доступа

  • Сначала проверяется наличие измененного размером изображения, если оно существует, то оно отображается;
  • Если измененного размером изображения нет, проверяется наличие оригинального изображения, если оно существует, то формируется команда graphicsmagick (gm) для создания и отображения измененного размером изображения, иначе возвращается код ошибки 404

Установка

Процесс установки для CentOS6 описан в nginx+lua+GraphicsMagick установке

Настройка

Зависимости

  • Nginx
./configure --prefix=/usr/local/nginx \
--user=www \
--group=www \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid  \
--lock-path=/var/run/nginx.lock \
--error-log-path=/opt/logs/nginx/error.log \
--http-log-path=/opt/logs/nginx/access.log \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_sub_module \
--with-http_flv_module \
--with-http_dav_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_addition_module \
--with-http_spdy_module \
--with-pcre \
--with-zlib=../zlib-1.2.8 \
--add-module=../nginx-http-concat \
--add-module=../lua-nginx-module \
--add-module=../ngx_devel_kit \
  • GraphicsMagick (1.3.18)
    • libjpeg
    • libpng
    • inotify (необязательно)### Описание конфигурационных файлов
nginx конфигурационные файлы /etc/nginx
vhost - конфигурационные файлы для сайтов
  • demo.conf - конфигурационный файл для обычного сайта, включает настройки для фиксированной высоты и ширины, а также для фиксированной высоты и ширины
  • fdfs.conf - конфигурационный файл для fastdfs, включает настройки для фиксированной высоты и ширины, а также для фиксированной высоты и ширины
lua - директория для обработки обрезки изображений
  • autoSize.lua - скрипт Lua для обработки обрезки изображений в режиме фиксированной высоты или ширины
  • cropSize.lua - скрипт Lua для обработки обрезки изображений в режиме фиксированной высоты и ширины

Пример конфигурации nginx vhost

server{
    listen 80
    
    # установка переменной для миниатюры изображения
    set $upload_path /opt/uploads;
    set $img_original_root $upload_path;# исходная корневая директория;
    set $img_thumbnail_root $upload_path/cache/thumb;
    set $img_file $img_thumbnail_root$uri;
}
``````markdown
    # Пример: /xx/xx/xx.jpg_100-.jpg или /xx/xx/xx.jpg_-100.jpg
    location ~* ^(.+\.(jpg|jpeg|gif|png))_((\d+\-)|(\-\d+))\.(jpg|jpeg|gif|png)$ {
            root $img_thumbnail_root;    # корневая директория для обрезанных изображений
            set $img_size $3;
    }
    если (!-f $img_file) {    # если файл не существует
            add_header X-Powered-By 'Nginx+Lua+GraphicsMagick By Yanue';  # заголовок для теста
            add_header file-path $request_filename;    # заголовок для теста
            set $request_filepath $img_original_root$1;    # полный путь к origin_img: /document_root/1.gif
            set $img_size $3;    # ширина или высота изображения в зависимости от uri
            set $img_ext $2;    # расширение файла
            content_by_lua_file /etc/nginx/lua/autoSize.lua;    # загрузка lua
    }
    ```
```markdown
    # Подобно: /xx/xx/xx.jpg_100x100.jpg
    location ~* ^(.+\.(jpg|jpeg|gif|png))_(\d+)+x(\d+)+\.(jpg|jpeg|gif|png)$ {
            root $img_thumbnail_root;    # корневая директория для обрезанных изображений
    }
``````markdown
            if (!-f $img_file) {    # если файл не существует
                    add_header X-Powered-By 'Nginx+Lua+GraphicsMagick By Yanue';  # заголовок для тестирования
                    add_header file-path $request_filename;    # заголовок для тестирования
                    set $request_filepath $img_original_root$1;    # путь к исходному изображению
                    set $img_width $3;    # ширина изображения
                    set $img_height $4;    # высота изображения
                    set $img_ext $5;    # расширение файла
                    content_by_lua_file /etc/nginx/lua/cropSize.lua;    # загрузка Lua
            }
    }
    
    location = /favicon.ico {
                log_not_found off;
                access_log off;
    }
}

конфигурация nginx для fastdfs

server{
    listen       Yöntem 80;
    server_name xxx.com;
    
    set $img_thumbnail_root /opt/fastdfs/thumb; # установка пути для миниатюр
    set $img_file $img_thumbnail_root$uri;   # путь к миниатюре

    # подобно: /pic/M00/xx/xx/xx.jpg_100-.jpg или /pic/M00/xx/xx/xx.jpg_-100.jpg
    location ~* ^(\/(\w+)(\/M00)(.+\.(jpg|jpeg|gif|png)))_((\d+\-)|(\-\d+))\.(jpg|jpeg|gif|png)$ {
            root $img_thumbnail_root;    # корневая директория для обрезанных изображений
            set $fdfs_group_root /opt/fastdfs/$2/store0/data; # установка пути для группы fastdfs $2
}
```            if (!-f $img_file) {    # если миниатюра не существует
                    add_header X-Powered-By 'Nginx+Lua+GraphicsMagick By Yanue';  # заголовок для тестирования
                    add_header file-path $request_filename;    # заголовок для тестирования
                    set $request_filepath $fdfs_group_root$4;    # полный путь к исходному изображению: /document_root/1.gif
                    set $img_size $6;    # ширина или высота изображения в зависимости от URI: размер изображения, например "-100" или "100-", "-" означает автоматический размер
                    set $img_ext $5;    # расширение файла
                    content_by_lua_file /etc/nginx/lua/autoSize.lua;    # загрузка Lua для автоматического изменения ширины или высоты
            }
    }```markdown
    # подобно: /pic/M00/xx/xx/xx.jpg_200x100.jpg
    location ~* ^(\/(\w+)(\/M00)(.+\.(jpg|jpeg|gif|png))_(\d+)+x(\d+)+\.(jpg|jpeg|gif|png))$ {
            root $img_thumbnail_root;    # корневая директория для обрезанных изображений
            set $fdfs_group_root /opt/fastdfs/$2/store0/data; # установка пути для группы fastdfs $2
``````markdown
            if (!-f $img_file) {   # если файл миниатюры не существует
                    add_header X-Powered-By 'Nginx+Lua+GraphicsMagick By Yanue';  # заголовок для тестирования
                    add_header file-path $request_filename;    # заголовок для тестирования
                    set $request_filepath $fdfs_group_root$4;    # путь к реальному файлу
                    set $img_width $6;    # ширина изображения
                    set $img_height $7;    # высота изображения
                    set $img_ext $5;     # расширение файла
                    content_by_lua_file /etc/nginx/lua/cropSize.lua;    # загрузка Lua файла cropSize
            }
    }

    location /pic/M00 {
            alias /opt/fastdfs/pic/store0/data;
            ngx_fastdfs_module;
    }

    location /chat/M00 {
            alias /opt/fastdfs/chat/store0/data;
            ngx_fastdfs_module;
    }

    location = /favicon.ico {
            log_not_found off;
            access_log off;
    }
}

Последнее примечание

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

Ссылка: https://github.com/hopesoft/nginx-lua-image-module


Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Подобно Taobao, получение изображений с заданными размерами на основе параметров, динамическое создание эскизов, поддержка двух режимов [фиксированный режим с заданной высотой и шириной, режим с фиксированной высотой или шириной], поддержка FastDFS для хранения файлов. GitHub: https://github.com/yanue/nginx-lua-GraphicsMagick Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/yanue-nginx-lua-GraphicsMagick.git
git@api.gitlife.ru:oschina-mirror/yanue-nginx-lua-GraphicsMagick.git
oschina-mirror
yanue-nginx-lua-GraphicsMagick
yanue-nginx-lua-GraphicsMagick
master