Изображения

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

Иногда возникает необходимость обработать графическое изображение с вебсайта и сохранить результат в хранилище или на локальный диск. Для этого вы должны перейти в контекст изображений, используя команду 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
                        
                    

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

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

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

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

Тип 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'
                        
                    

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

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