Как использовать метод синтаксического анализа веб-версий 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 должен быть того же размера, и файл не должен быть поврежден.

0 ответов

Другие вопросы по тегам