Чтение изображения из буфера с помощью 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: [] });
})();
Я использую изображение здесь, чтобы проверить.