Изображения
Переход в контекст изображений
Иногда возникает необходимость обработать графическое изображение с вебсайта и сохранить результат в хранилище или на локальный диск. Для этого вы должны перейти в контекст изображений, используя команду 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 | масштабирует изображение к заданному размеру, используя заданный алгоритм | ||||||||||
| |||||||||||
resize_to_fit | масштабирует изображение, вписывая его в заданный прямоугольник, используя заданный алгоритм с сохранением пропорций | ||||||||||
| |||||||||||
crop | кадрирует изображение в новое изображение с заданной шириной и высотой | ||||||||||
|
Ниже приведен пример как сделать миниатюру из изображения с сохранением пропорций:
# ЗАГРУЖАЕМ ИЗОБРАЖЕНИЕ
- 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. Также изображения не будут сохраняться, если ваш диггер находится в режиме отладки.
Далее мы изучим функции, предназначенные для работы с бинарными файлами.