Как использовать метод синтаксического анализа веб-версий npm pngjs для получения файла png и записи файла на диск
Вопросы, которые я читал о stackoverflow, не помогли мне решить мою проблему.
Это весь код на стороне клиента без nodejs.
У меня есть код, который использует Fetch api для возврата png в response.body. Я могу успешно записать этот файл на диск с помощью API доступа к файловой системе. Без обработки png через pngjs изображение сохраняется правильно.
Хотя pngjs говорит, что принимает читаемый поток и ответ. Body должен быть читаемым потоком, pngjs выдает ошибку. Я предполагаю, что читаемый поток в Интернете отличается от формата nodejs. Однако я могу вернуть данные из выборки как ArrayBuffer, и pngjs примет это без проблем.
Моя проблема в том, что png, возвращенный методом синтаксического анализа pngjs, поврежден, даже если я на самом деле ничего не делаю с изображением в анализируемом методе.
Вот код.
// Fecth png в ArrayBuffer
const response = await fetch(url);
let arrayBuffer = await response.arrayBuffer()
// Разбираем arrayBuffer с помощью pngjs
processImage(arrayBuffer)
async function processImage(arrayBuffer) {
let dst = new PNG({})
return new Promise((res, rej) => {
// res(arrayBuffer)
dst.parse(arrayBuffer, function (error, data) {
res(data.pack())
})
})
}
}
}
// Записываем файл на диск
writable.write({type: "write", data: data.data})
await writable.close();
Я ничего не делаю с данными во время метода синтаксического анализа только для тестирования.
Из приведенного выше кода, если я просто верну arrayBuffer
res(arrayBuffer)
файл правильный. Однако я передаю его методу синтаксического анализа pngjs, даже если подумал, что не изменяю файл, который оказывается поврежденным.
Когда я не разбираю файл, он возвращает ArrayBuffer правильного размера и записывает файл размером 595 КБ с размером arrayBuffer 608325.
Когда я анализирую файл, даже если я его не изменяю. Результирующий размер файла составляет 1024 КБ, а размер ArrayBuffer - 1048576.
ArrayBuffer, возвращаемый обоими процессами, имеет тип uint8Array.
Ожидаемый результат: поскольку я не изменяю файл в методе синтаксического анализа pngjs, возвращаемый ArrayBuffer должен быть того же размера, и файл не должен быть поврежден.