2017-09-28 29 views
0

我最近在使用銳庫的節點中進行圖像處理,讓我的服務返回新圖像的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

回答