Чтение изображения из буфера с помощью pngjs

Чего я ожидаю:
я пытаюсь прочитать изображение PNG по URL-адресу, а затем проанализировать его с помощью pngjs

Что я получаю:
Ошибка: неверная подпись файла

Что я пробовал:
РезультатurlToBuffer()определенно буфер. Я пробовал разные кодировки, пробовал разные http-клиенты и т. Д.

Где возникает ошибка:
https://github.com/lukeapage/pngjs/blob/master/lib/parser.js Строка: 48

Мой код:

const axios = require('axios').default;
const PNG = require('pngjs').PNG;

const urlToBuffer = async (url) => {
  return axios({
      method: 'get',
      url: url,
      responseType: 'arraybuffer'
  })
  .then(res => Buffer.from(res.data))
  .then(buffer => {
      console.log('is buffer?', Buffer.isBuffer(buffer));
      console.log(buffer);
      return buffer;
  });
};

const beforeImageURL = 'https://my-source.com/image.png';
const beforeImageBuffer = await urlToBuffer(beforeImageURL);
const beforeImage = PNG.sync.read(beforeImageBuffer);

1 ответ

Ваш код у меня работает очень хорошо, он загружает изображение и анализирует его.

Я немного переделал, чтобы сохранить изображение (чтобы его можно было открыть в редакторе изображений / VS Code), а также записал свойства изображения в консоль.

Интересно, есть ли проблема с изображением по конкретному URL-адресу, который вы используете для тестирования?

const axios = require('axios').default;
const PNG = require('pngjs').PNG;
const fs = require("fs");

const urlToBuffer = async (url) => {
return axios({
    method: 'get',
    url: url,
    responseType: 'arraybuffer'
})
.then(res => Buffer.from(res.data))
.then(buffer => {
    console.log('is buffer?', Buffer.isBuffer(buffer));
    console.log(buffer);
    return buffer;
});
};

(async () => {
    const beforeImageURL = 'https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png';
    const beforeImageBuffer = await urlToBuffer(beforeImageURL);
    // Test by writing to file.
    fs.writeFileSync("image.png", beforeImageBuffer);
    const beforeImage = PNG.sync.read(beforeImageBuffer);
    console.log("Image properties:");
    console.table( { ...beforeImage, data: [] });
})();

Я использую изображение здесь, чтобы проверить.

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