如何将远程图像读取为 base64 数据 url
How to read remote image to a base64 data url
其实这个问题有很多答案。但我的问题是,
我想用 5 个外部(URL)图像动态生成 pdf。我正在使用 PDFmake 节点模块。
它只支持本地和base64格式两种方式。但我不想在本地存储图像。
所以我的要求是一个以 url 作为参数和 returns base64 的函数。
这样我就可以存储在全局变量中并创建 pdf
提前致谢
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();
我使用 npm 中的 PDFmake 模块
首先可以使用 HTTP 请求获取远程图像的内容,例如使用无处不在的 request
npm 模块。然后可以将图像字符串内容转换为 buffer
,最后转换为 base64 字符串。要完成转换,请在 base64 字符串的开头添加适当的 data-url prefix,例如 data:image/png,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);
});
其实这个问题有很多答案。但我的问题是, 我想用 5 个外部(URL)图像动态生成 pdf。我正在使用 PDFmake 节点模块。 它只支持本地和base64格式两种方式。但我不想在本地存储图像。 所以我的要求是一个以 url 作为参数和 returns base64 的函数。 这样我就可以存储在全局变量中并创建 pdf
提前致谢
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();
我使用 npm 中的 PDFmake 模块
首先可以使用 HTTP 请求获取远程图像的内容,例如使用无处不在的 request
npm 模块。然后可以将图像字符串内容转换为 buffer
,最后转换为 base64 字符串。要完成转换,请在 base64 字符串的开头添加适当的 data-url prefix,例如 data:image/png,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);
});