Изображения

Переход в контекст изображений

Иногда возникает необходимость обработать графическое изображение с вебсайта и сохранить результат в хранилище или на локальный диск. Для этого вы должны перейти в контекст изображений, используя команду image. Эта команда работает только в блоковом контексте и требует наличия в регистре закодированного в base64 изображения. В настоящий момент поддерживаются следующие типы изображений: jpg, png, gif, webp, tif, bmp.

Как правило, алгоритм перехода в контекст достаточно стандартен. Нужно загрузить изображение, перейти в блок с закодированным изображением, отпарсить содержимое блока в регистр и перейти в image контекст:

                        # ЗАГРУЖАЕМ ИЗОБРАЖЕНИЕ
- walk:
    to: https://www.diggernaut.com/static/site/images/logo_light_beta.png
    do:
    # ПЕРЕХОДИМ В БЛОК С ЗАКОДИРОВАННЫМ В BASE64 ИЗОБРАЖЕНИЕМ
    - find:
        path: imgbase64
        do:
        # ПАРСИМ СОДЕРЖИМОЕ
        - parse
        # ПЕРЕХОДИМ В КОНТЕКСТ ИЗОБРАЖЕНИЙ
        - image:
            do:
            # ОБРАБАТЫВАЕМ ИЗОБРАЖЕНИЕ
                        
                    

Обрабатываем изображение

Находясь в контексте изображений, мы можем обработать изображение. К примеру, можно масштабировать и обрезать изображения. Список доступных команд и их описание приведен ниже:

Команда Описание
resize масштабирует изображение к заданному размеру, используя заданный алгоритм
Параметр Описание
width ширина нового изображения, в пикселях (если опущено, то ставится в 0). Если 0, то делается масштабирование по заданной высоте, с сохранением пропорций.
height высота нового изображения, в пикселях (если опущено, то ставится в 0). Если 0, то делается масштабирование по заданной ширине, с сохранением пропорций.
resampling используемый алгоритм:
lanczos Lanczos (используется по умолчанию, если параметр опущен)
bicubic Bicubic
bilinear Bilinear
box Box
nn Nearest Neighbor
resize_to_fit масштабирует изображение, вписывая его в заданный прямоугольник, используя заданный алгоритм с сохранением пропорций
Параметр Описание
width ширина нового изображения, в пикселях (если опущено, то ставится в 0).
height высота нового изображения, в пикселях (если опущено, то ставится в 0).
resampling используемый алгоритм:
lanczos Lanczos (используется по умолчанию, если параметр опущен)
bicubic Bicubic
bilinear Bilinear
box Box
nn Nearest Neighbor
crop кадрирует изображение в новое изображение с заданной шириной и высотой
Параметр Описание
x координата точки начала отсчета для кадрирования по оси X (если опущено, то ставится в 0).
y координата точки начала отсчета для кадрирования по оси Y (если опущено, то ставится в 0).
width ширина кадра, в пикселях.
height высота кадра, в пикселях.

Ниже приведен пример как сделать миниатюру из изображения с сохранением пропорций:

                        # ЗАГРУЖАЕМ ИЗОБРАЖЕНИЕ
- walk:
    to: https://www.diggernaut.com/static/site/images/logo_light_beta.png
    do:
    # ПЕРЕХОДИМ В БЛОК С ЗАКОДИРОВАННЫМ В BASE64 ИЗОБРАЖЕНИЕМ
    - find:
        path: imgbase64
        do:
        # ПАРСИМ СОДЕРЖИМОЕ
        - parse
        # ПЕРЕХОДИМ В КОНТЕКСТ ИЗОБРАЖЕНИЙ
        - image:
            do:
            # ДЕЛАЕМ МИНИАТЮРУ ШИРИНОЙ 50 ПИКСЕЛЕЙ
            - resize:
                width: 50
                        
                    

Сохраняем изображение

После обработки нам нужно сохранить изображение. Можно сохранить изображение обратно в регистр, в локальный файл на компьютере (доступно только в скомпилированном диггере), в облачное хранилище (на данный момент поддерживается: Amazon S3, Yandex Object Storage) или на FTP сервер. Для сохранения изображения используется команда save.

Команда поддерживает следующие параметры:

Параметр Описание
ext Расширение, определяющее тип сохраняемого файла. Если опущено, используется оригинальный тип и расширение. В данный момент поддерживаются следующие расширения для сохранения: jpg, png, gif, tif и bmp.
to Тип хранилища. В данный момент поддерживаются следующие типы: register, file, s3, yandex и ftp.

Тип register не использует никаких дополнительных параметров. Изображение кодируется в BASE64 и сохраняется в регистр.

                        # ЗАГРУЖАЕМ ИЗОБРАЖЕНИЕ
- walk:
    to: https://www.diggernaut.com/static/site/images/logo_light_beta.png
    do:
    # ПЕРЕХОДИМ В БЛОК С ЗАКОДИРОВАННЫМ В BASE64 ИЗОБРАЖЕНИЕМ
    - find:
        path: imgbase64
        do:
        # ПАРСИМ СОДЕРЖИМОЕ
        - parse
        # ПЕРЕХОДИМ В КОНТЕКСТ ИЗОБРАЖЕНИЙ
        - image:
            do:
            # СОХРАНЯЕМ ИЗОБРАЖЕНИЕ КАК JPG В РЕГИСТР
            - save:
                ext: jpg
                to: register
        # ТЕПЕРЬ У НАС В РЕГИСТРЕ ИЗОБРАЖЕНИЕ В ФОРМАТЕ JPG
        # СОХРАНЯЕМ ЕГО В ПЕРЕМЕННУЮ
        - variable_set: newimage
                        
                    

Тип file сохраняет изображение на локальный диск. Этот тип будет работать только в скомпилированных парсерах. При использовании хранилища подобного типа, требуются следующие параметры:

Параметр Описание
name Имя файла без расширения. Если не задано, будет сгенерировано уникальное имя.
path Путь до директории, куда нужно сохранить файл. Если не задано, файл будет сохранен в текущую директорию.
                        # ЗАГРУЖАЕМ ИЗОБРАЖЕНИЕ
- walk:
    to: https://www.diggernaut.com/static/site/images/logo_light_beta.png
    do:
    # ПЕРЕХОДИМ В БЛОК С ЗАКОДИРОВАННЫМ В BASE64 ИЗОБРАЖЕНИЕМ
    - find:
        path: imgbase64
        do:
        # ПАРСИМ СОДЕРЖИМОЕ
        - parse
        # ПЕРЕХОДИМ В КОНТЕКСТ ИЗОБРАЖЕНИЙ
        - image:
            do:
            # СОХРАНЯЕМ ИЗОБРАЖЕНИЕ В ФАЙЛ (e://myimages/mylogo.png)
            - save:
                to: file
                name: mylogo
                path: 'e://myimages'
                        
                    

Тип s3 сохраняет изображение в облачное хранилище Amazon S3. При использовании хранилища подобного типа, требуются следующие параметры:

Параметр Описание
key Ключ доступа к AWS S3. Обязательный параметр.
secret Секрет для доступа к AWS S3. Обязательный параметр.
region Регион в AWS S3. Обязательный параметр.
bucket Имя бакета в AWS S3. Обязательный параметр.
token Токен для доступа в AWS S3. Необязательный параметр.
name Имя файла без расширения. Если не задано, будет сгенерировано уникальное имя.
path Путь до директории, куда нужно сохранить файл. Если не задано, файл будет сохранен в рутовую директорию бакета.
                        # ЗАГРУЖАЕМ ИЗОБРАЖЕНИЕ
- walk:
    to: https://www.diggernaut.com/static/site/images/logo_light_beta.png
    do:
    # ПЕРЕХОДИМ В БЛОК С ЗАКОДИРОВАННЫМ В BASE64 ИЗОБРАЖЕНИЕМ
    - find:
        path: imgbase64
        do:
        # ПАРСИМ СОДЕРЖИМОЕ
        - parse
        # ПЕРЕХОДИМ В КОНТЕКСТ ИЗОБРАЖЕНИЙ
        - image:
            do:
            # СОХРАНЯЕМ ИЗОБРАЖЕНИЕ В ХРАНИЛИЩЕ S3 (/logos/mylogo.png)
            - save:
                to: s3
                key: AWSAJJDJJSJDJDJFK
                secret: AWSSERETTDHFJJJDJSKFJFJSJJFJJGKRI
                region: us-east-1
                bucket: mybucket
                name: mylogo
                path: '/logos'
                        
                    

Тип s3 сохраняет изображение в облачное хранилище Yandex Object Storage. При использовании хранилища подобного типа, требуются следующие параметры:

Параметр Описание
key Ключ доступа к Yandex Object Storage. Обязательный параметр.
secret Секрет для доступа к Yandex Object Storage. Обязательный параметр.
region Регион в Yandex Object Storage. Обязательный параметр.
bucket Имя бакета в Yandex Object Storage. Обязательный параметр.
token Токен для доступа в Yandex Object Storage. Необязательный параметр.
name Имя файла без расширения. Если не задано, будет сгенерировано уникальное имя.
path Путь до директории, куда нужно сохранить файл. Если не задано, файл будет сохранен в рутовую директорию бакета.
                        # ЗАГРУЖАЕМ ИЗОБРАЖЕНИЕ
- walk:
    to: https://www.diggernaut.com/static/site/images/logo_light_beta.png
    do:
    # ПЕРЕХОДИМ В БЛОК С ЗАКОДИРОВАННЫМ В BASE64 ИЗОБРАЖЕНИЕМ
    - find:
        path: imgbase64
        do:
        # ПАРСИМ СОДЕРЖИМОЕ
        - parse
        # ПЕРЕХОДИМ В КОНТЕКСТ ИЗОБРАЖЕНИЙ
        - image:
            do:
            # СОХРАНЯЕМ ИЗОБРАЖЕНИЕ В ХРАНИЛИЩЕ YANDEX (/logos/mylogo.png)
            - save:
                to: yandex
                key: AWSAJJDJJSJDJDJFK
                secret: AWSSERETTDHFJJJDJSKFJFJSJJFJJGKRI
                region: ru-central1
                bucket: mybucket
                name: mylogo
                path: '/logos'
                        
                    

Тип ftp сохраняет изображение на указанный FTP сервер. При использовании хранилища подобного типа, требуются следующие параметры:

Параметр Описание
host IP адрес или имя хоста FTP сервера. Обязательный параметр.
port Порт FTP сервера, если не указан, используется стандартный порт 21. Необязательный параметр.
username Имя пользователя для доступа к FTP серверу, если не указан, используется пустая строка вместо имени пользователя. Необязательный параметр.
password Пароль пользователя для доступа к FTP серверу, если не указан, используется пустая строка вместо пароля. Необязательный параметр.
name Имя файла без расширения. Если не задано, будет сгенерировано уникальное имя.
path Путь до директории, куда нужно сохранить изображение. Если не задано, изображение будет сохранено в текущую директорию FTP сервера после логина.
                        # ЗАГРУЖАЕМ ИЗОБРАЖЕНИЕ
- walk:
    to: https://www.diggernaut.com/static/site/images/logo_light_beta.png
    do:
    # ПЕРЕХОДИМ В БЛОК С ЗАКОДИРОВАННЫМ В BASE64 ИЗОБРАЖЕНИЕМ
    - find:
        path: imgbase64
        do:
        # ПАРСИМ СОДЕРЖИМОЕ
        - parse
        # ПЕРЕХОДИМ В КОНТЕКСТ ИЗОБРАЖЕНИЙ
        - image:
            do:
            # СОХРАНЯЕМ ИЗОБРАЖЕНИЕ НА FTP (logos/mylogo.png)
            - save:
                to: ftp
                host: ftp.mywebsite.com
                port: 21
                username: user1
                password: mysecretpassword
                name: mylogo
                path: 'logos'
                        
                    

Примите во внимание, что для диггкров, запускаемых в облаке, при записи изображений в облачные хранилища и на FTP используется квота на трафик, соответствующая вашему тарифному плану. К примеру, на бесплатном плане квота составляет 10 мегабайт в месяц. При достижении квоты, изображения перестанут сохраняться в облачном хранилище / FTP. Также изображения не будут сохраняться, если ваш диггер находится в режиме отладки.

Далее мы изучим функции, предназначенные для работы с бинарными файлами.