Изображение: загрузка, подписи и размеры
Изображение, которое добавляется по URL, загрузкой файла или вставкой файла из буфера обмена.
Импорт
import { Image } from '@bloklabs/core/tools';Конфигурация
| Опция | Тип | По умолчанию | Описание |
|---|---|---|---|
uploader | ImageUploader | undefined | Загрузчик от потребителя с необязательными методами |
types | string[] | ['image/*'] | Список разрешённых MIME-типов. Записи могут быть точными ( |
maxSize | MaxSizeConfig | 30 MiB | Максимальный размер загрузки. Число ограничивает все типы, в байтах. Объект задаёт ограничение для каждого MIME-типа, где |
onUploadError | UploadErrorHandler | undefined | Вызывается, когда загрузка не удалась. Получает
Если ваш uploader отклонил промис, придёт код |
sources | 'upload' | 'url' | 'both' | 'both' | Ограничивает способы добавления изображения: только загрузка файла, только URL или оба варианта. |
convertGifToVideo | boolean | true | Автоматически преобразовывать анимированные GIF при вставке в зацикленный блок видео WebM. Работает, только если зарегистрирован инструмент видео. Без него GIF остаются блоками изображения. Установите false, чтобы GIF всегда оставались блоками изображения. |
captionPlaceholder | string | "Write a caption…" | Плейсхолдер, который показывается в поле подписи. |
compress | boolean | ImageCompressionConfig | true | Перекодирует загружаемые изображения до того, как они попадут в загрузчик. По умолчанию включено в намеренно безопасном режиме: тот же формат, качество 0.92, исходные размеры. Результат используется, только если экономит не менее 10%, иначе загружаются исходные байты без изменений. Передайте объект, чтобы получить файл поменьше. Ключи такие:
Установите |
reloadAttempts | number | 5 | Сколько раз отрисованное изображение молча перезапрашивает свой |
filters | Array<ImageFilterPreset | ImageFilterDefinition> | every built-in | Фильтры, которые предлагает вкладка «Фильтры» редактора изображений, по порядку. «Оригинал» всегда идёт первым.
Встроенный фильтр, которого нет в списке, всё равно отображается на изображениях, где он уже применён. Сохранённое имя, которое редактор не знает, отображается без фильтра и сохраняется как есть. |
Формат данных
interface ImageData {
url: string; // Image source URL — http(s) or blob:
caption?: string; // Plain-text caption
width?: number; // Width as percent of container, 10–100 (default 100)
alignment?: 'left' | 'center' | 'right';
size?: 'sm' | 'md' | 'lg' | 'full'; // Discrete size preset; overrides width when set
frame?: 'none' | 'border' | 'shadow'; // Decorative frame treatment (default 'none')
rounded?: boolean; // Rounded corners (default true)
captionVisible?: boolean; // Caption visible in the rendered state (default true)
crop?: ImageCrop; // Non-destructive crop rectangle, in the turned image's box
rotation?: 0 | 90 | 180 | 270; // Clockwise quarter turn (omitted for 0)
flipX?: boolean; // Mirrored left to right, before rotation
straighten?: number; // Fine turn in degrees, -45 to 45, after rotation
filter?: ImageFilterPreset | string; // A built-in look or a host filter name (omitted for 'none')
filterStrength?: number; // How strongly filter applies, 0 to 100 (omitted for 100)
adjust?: { brightness?: number; contrast?: number; saturation?: number }; // Each -100 to 100
markup?: ImageMarkup[]; // Drawings, shapes and text over the image, back to front
alt?: string; // Alt text for screen readers
fileName?: string; // Original filename, when known
naturalWidth?: number; // Intrinsic pixel width of the source (cached)
naturalHeight?: number; // Intrinsic pixel height of the source (cached)
variants?: { url: string; mimeType: string }[]; // Other formats, best first
}{
"id": "img001",
"type": "image",
"data": {
"url": "https://example.com/image.png",
"caption": "A cat",
"alt": "A cat",
"alignment": "center"
}
}Пример использования
import { Blok } from '@bloklabs/core';
import { Image } from '@bloklabs/core/tools';
const editor = new Blok({
holder: 'editor',
tools: {
image: {
class: Image,
config: {
uploader: {
async uploadByFile(file) {
const url = await myUpload(file);
return { url, fileName: file.name };
},
},
},
},
},
});