Введение:
Я возился с функциями фильтрации изображений fabri cJS, пытаясь использовать их в своем веб-приложении, но столкнулся с следующее.
Кажется, fabri cJS по умолчанию только устанавливает ограничение размера изображения (textureSize) для фильтров на 2048, то есть самое большое изображение составляет 2048x2048 пикселей.
I Я пытался повысить значение по умолчанию, вызвав fabric.isWebGLSupported()
, а затем установив fabric.textureSize = fabric.maxTextureSize
, но это все еще ограничивает его размером 4096x4096 пикселей, даже если мой maxTextureSize на моем устройстве находится в диапазоне 16000 ~.
Я понимаю, что устройства обычно сообщают полную стоимость без учета текущей доступной памяти, но это все еще кажется жестким ограничением.
Так что я думаю, что основные проблемы, которые я рассматриваю здесь, чтобы начать эффективно использовать эту функцию:
1 - блокировка рендеринга applyFilters()
метод:
Кажется, что текущая функция приложения фильтра блокирует рендеринг в браузере, есть ли способ вызвать ее у вас не блокировать рендеринг, чтобы я мог показать неопределенный c загрузчик или что-то в этом роде?
это так просто, как сделать метод применения фильтра asyn c и вызвать его из другого места в приложении? (Я использую vue для контекста, с webpack / babel, который заполняет async / await et c.)
2 - ограничения по размеру:
Is Есть ли способ обойти ограничение размера изображений? Я пытаюсь отфильтровать изображения размером до 4800x7200 пикселей
Я могу придумать, по крайней мере, один из способов сделать это: «разбить» изображение на более мелкие изображения, применить фильтры и затем сшить их обратно. все вместе. Но я волнуюсь, что это может повлиять на производительность, так как в этом процессе будет много операций экспорта и инициализации холста.
Я удивлен, что fabri cjs не делает этого "чанкинг" "по умолчанию, поскольку это довольно обширная библиотека, и я думаю, что они уже подошли к тому моменту, когда они используют шейдеры WebGL (для меня это черный ящик) для фильтрации под капотом на производительность, есть ли лучший способ сделать это?" это?
Мое другое решение было бы отправить изображение в службу (один я ручная или ранее платная), которая применяет фильтры где-то в облаке и возвращает его пользователю, но это пока я не предпочитаю решение.
Для контекста я в основном использую fabric.Canvas
и fabric.StaticCanvas
для инициализации холстов в моем приложении.
Любые идеи / помощь с это было бы здорово.