Как прочитать удаленное изображение на URL-адрес base64 - PullRequest
0 голосов
/ 01 февраля 2020

на самом деле есть много ответов на этот вопрос. Но моя проблема в том, что я хочу генерировать PDF динамически с 5 внешними (URL) изображениями. Я использую модуль узла PDFmake. он поддерживает только два способа локальный и base64 формат. Но я не хочу хранить изображения локально. поэтому мое требование - это одна функция, которая принимает url в качестве параметра и возвращает base64. так что я могу хранить в глобальной переменной и создавать pdfs

заранее спасибо

function urlToBase(URL){
return base64;
}

var img = urlToBase('https://unsplash.com/photos/MVx3Y17umaE');
var dd = {
            content: [
              {
                text: 'fjfajhal'
              },
              {
                image: img,
              }
            ]
          };

          var writeStream = fs.createWriteStream('myPdf.pdf');
        var pdfDoc = printer.createPdfKitDocument(dd);
        pdfDoc.pipe(writeStream);
        pdfDoc.end();

im используя модуль PDFmake из npm

1 Ответ

1 голос
/ 01 февраля 2020

Содержимое удаленного образа можно сначала получить с помощью HTTP-запроса, например, с помощью вездесущего модуля request npm. Содержимое строки изображения затем может быть преобразовано в buffer и, наконец, преобразовано в строку base64. Чтобы завершить преобразование, добавьте правильный префикс data-url , например, data:image/png,base64, в начало строки base64.

Вот примерный пример для изображения PNG:

const request = require('request-promise-native');

let jpgDataUrlPrefix = 'data:image/png;base64,';
let imageUrl         = 'https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png';

request({
    url: imageUrl,
    method: 'GET',
    encoding: null // This is actually important, or the image string will be encoded to the default encoding
})
    .then(result => {
        let imageBuffer  = Buffer.from(result);
        let imageBase64  = imageBuffer.toString('base64');
        let imageDataUrl = jpgDataUrlPrefix+imageBase64;

        console.log(imageDataUrl);
    });
...