Большое изображение не отображается на холсте с использованием Konva JS при использовании кеша - PullRequest
0 голосов
/ 09 июля 2020

Я использую konva js и vue -konva, чтобы разместить изображение в области прямоугольника. Мне нужно кэшировать это изображение, чтобы применить к нему настраиваемый фильтр.

Это изображение загружено пользователем, и его размеры могут быть довольно большими (например, с камеры устройства), а устройство может быть смартфон с ограниченными ресурсами.

С маленькими изображениями все работает нормально, но когда пользователь выбирает большое изображение на мобильном телефоне (например, 2500x2500), изображение отображается первым и исчезает при вызове метода cache() узел изображения.

Похоже, это зависит от устройства: на моем ноутбуке все в порядке, но не на моем смартфоне (оба устройства высокого класса), оба с последней версией Google Chrome. Мне удалось воспроизвести проблему на моем ноутбуке с еще большим изображением (~ 6000x6000).

Я действительно не знаю, связано ли это с Konva или я достигаю ограничений браузера с большими файлами (которые мог бы объяснить это зависит от устройства). Если это так, мы будем очень признательны за любые советы / обходные пути.

И последнее, но не менее важное: мне нужно сделать экспорт холста, чтобы распечатать его позже (разрешение 300 точек на дюйм, окончательное изображение должно быть около 2300 пикселей), поэтому я не могу слишком сильно уменьшить размер изображения.

Вы можете воспроизвести эту ссылку .

1 Ответ

1 голос
/ 10 июля 2020

Это связано с ограничениями браузера. Иногда они могут не рисовать слишком большие изображения. Также в устройствах HDPI (почти на всех современных экранах) Konva пытается улучшить качество кеша за счет увеличения размера кеша. Это имеет смысл для любых векторных фигур (например, прямоугольников, кругов и т. Д. c). Но для изображения это не очень помогает.

Таким образом, вы можете уменьшить размер кэшированного изображения с помощью этого: точно такой же, как размер изображения. Вы можете попытаться уменьшить его еще больше. Как pixelRatio = 0.5. Если у вас большое изображение и оно уменьшено до меньшего размера, пользователь может не заметить разницу в снижении качества.

...