Использование fabric.js как инструмент для кропа изображений
Задача: сделать инструмент, с помощью которого юзер может обрезать свое изображение по определнной маске.
Например, есть вот такая рамка:
Юзер может перетягивать свое изображение под этой маской, менять его размер и по нажатии на кнопку, все, что внутри фигуры сохраняется в .png файл.
Я буду использовать библиотеку для работы с html5 canvas fabric.js. Ничего более простого я придумать не смог.
Маска должна быть в .svg, вот, например, моя.
Создаем два canvas: один статичный (маска то не изменяемая), второй нет (на нем будет фото). Pointer-events мы используем для того, что статичный canvas будет находится над другим (фото должно быть под маской), но pointer-events должны быть только у нижнего.
1 2 3 4 5 6 |
|
1 2 3 4 5 |
|
Подключаем fabric.js и пишем js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Мы добавили нашу маску на статичный canvas, и изображение – на динамический. Теперь код кнопки “Обрезать”:
1 2 3 4 5 6 7 8 9 10 |
|
То есть мы обрезали наш canvas с фотографией по контору векторной маски и сохранили его в png файл, который хранится в переменной dataUrl.
Результат работ:
P.S. Если нужно создать canvas в модальном окне Bootstrap 3, то лучше создавать холст на событии ‘shown.bs.modal’. Иначе он не будет принимать pointer events.