我最近在使用銳庫的節點中進行圖像處理,讓我的服務返回新圖像的base64編碼。我的問題似乎很簡單:base64編碼圖像總是以==
結尾?如果不是,處理jpeg/png有什麼區別?我的理解是,無論格式如何,編碼都應該是相同的,但是這使我想不到。在測試期間,我決定進行單元測試,以驗證我的響應(base64映像)的主體是否以=
結尾。 我發現的是,如果我通過使用sharp.max()
調整大小但不保留比例來裁剪圖像,測試將通過。如果我放棄這一點,並調整到任何我喜歡的高度/寬度參數,測試將失敗。值得注意的是,這種行爲僅限於png,而不是jpeg。什麼時候base64編碼的PNG圖像不以'='結尾
這裏是我的尺寸功能:
const sharp = require('sharp');
const request = require('request');
const bufferRequest = request.defaults({ encoding: null });
function imgFormatter(url, args) {
return new Promise((resolve, reject) => {
bufferRequest.get(url, args, function (err, res, body) {
let imgFormat = url.includes('png') ? 'png' : 'jpeg';
let resized = (args.crop)
? sharp(body).resize(args.width, args.height)
: sharp(body).resize(args.width, args.height).max()
resized.toFormat(imgFormat)
.toBuffer()
.then((output) => {
let newImage = "data:" + res.headers["content-type"] + ";base64," + new Buffer(output).toString('base64');
console.log(newImage);
resolve(newImage);
})
.catch((error) => {
reject(error);
})
});
})
}
這裏是文件的結尾看起來像被裁剪掉了:
data:image/jpeg;base64,/9j/.....RgX7p57pbYTvawQC580N4QcJtygGGgG/SLplthgBV2KCfCgIa3wWTVA3HySPmgP//Z
下面是當不被裁剪圖像:
data:image/jpeg;base64,/9j/.....4qUhXQD5S5HzQhAM8KRz80IQH//2Q==
道歉的例子片段,我的base64是如此之大,我不能在這裏包括。我使用https://codebeautify.org/base64-to-image-converter來測試圖像是否良好,並且我可以看到正確尺寸的圖像都按照預期生成。爲什麼裁剪後的圖像編碼爲base64而不是以==
結束? 在情況下,它是有用的,這裏是我使用的尖銳庫:http://sharp.dimens.io/en/stable/api-resize/#max