Я использую библиотеку JS для векторизации растрового изображения, и библиотека возвращает сплошную цветную заливку вместо желаемого результата.
Я думаю, что это связано с ArrayBuffer.
Я загружаю изображение в двоичный файл следующим образом:
const arrayBuffer = await image.read({ format: filesystem.formats.binary });
Библиотека ожидает объект ImageData , но среда находится в canvas
и ImageData
не поддерживаются, поэтому я пытаюсь создать поддельный объект ImageData для передачи в библиотеку:
var imageData = {data: arrayBuffer, width: sceneNode.globalBounds.width, height: sceneNode.globalBounds.height};
var results = library.apply(imageData);
Я пытаюсь запустить библиотеку, и она показывает ошибку, которая, как ожидается, будет иметь объект данныхсвойство length, поэтому я добавляю это заранее:
arrayBuffer.length = arrayBuffer.bytesLength;
После этого в библиотеке, по-видимому, нет ошибок, поскольку она возвращает данные SVG. Но SVG - это просто путь границ изображения.
Я предполагаю, что проблема с ArrayBuffer в поддельном объекте ImageData является проблемой, и мне нужно преобразовать его в правильный формат.
В документах говорится об этом свойстве ImageData.data:
ImageData.data - это Uint8ClampedArray, представляющий одномерный массив, содержащий данные в порядке RGBA, с целочисленными значениями между 0и 255 (включительно).
Похоже, мне нужно преобразовать буфер массива в "Uint8ClampedArray, представляющий одномерный массив, содержащий данные в порядке RGBA, с целочисленными значениямиот 0 до 255 ".
Кроме того, если я читаю файл в двоичном формате на JavaScript, это стандартный ArrayBuffer правильно?
ОБНОВЛЕНИЕ :
Возможно, файл изображения загружен в буфер массива, но его необходимо декодировать из формата изображения (PNG или JPEG), а затем преобразовать в Uint8ClampedArray. ? и затем данные пикселей могут быть прочитаны, Как я могу создать холст imageData массив из представления arrayBuffer JPG . Это похоже на то, что делает класс ImageData.
Библиотека UPNG , кажется, декодирует PNG, но свойство данных является объектом, а не массивом?
Библиотека является ImageTracer - https://github.com/jankovicsandras/imagetracerjs