저는 날카로운 라이브러리를 사용하는 노드에서 이미지 조작으로 최근에 일했고 내 서비스가 새로운 이미지의 base64 인코딩을 반환하도록했습니다. 제 질문은 간단합니다 : base64로 인코딩 된 이미지는 항상 ==
으로 끝나나요? 그렇지 않다면, jpeg/png를 다룰 때의 차이점은 무엇입니까? 내 이해는 인코딩 형식에 관계없이 동일해야하지만,이 날 그렇지 않으면 생각하게됩니다. 테스트 도중, 내 응답 본문 (base64 이미지)이 =
으로 끝나는 지 확인하기 위해 단위 테스트를하기로 결정했습니다. 내가 발견 한 것은 sharp.max()
을 사용하여 비율을 유지하면서 이미지를 자르지 않으면 테스트가 통과한다는 것입니다. 이 값을 그대로두고 원하는 높이/너비 매개 변수로 크기를 조정하면 테스트가 실패합니다. 또한이 동작은 jpeg가 아니라 png로 제한된다는 점도 주목할 가치가 있습니다.언제 base64로 인코딩 된 png 이미지가 '='로 끝나지 않습니까?
data:image/jpeg;base64,/9j/.....4qUhXQD5S5HzQhAM8KRz80IQH//2Q==
: 여기
data:image/jpeg;base64,/9j/.....RgX7p57pbYTvawQC580N4QcJtygGGgG/SLplthgBV2KCfCgIa3wWTVA3HySPmgP//Z
가립니다 NOT 이미지입니다 : 여기
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);
})
});
})
}
가 잘린 경우처럼 파일의 끝이 보이는 것입니다 : 여기
내 크기 조정 기능입니다
예제 스 니펫에 대한 사과, 저의 base64가 너무 커서 여기에 포함 할 수 없습니다. 이미지가 좋은지 테스트하려면 https://codebeautify.org/base64-to-image-converter을 사용하고 있습니다. 올바른 크기로 예상대로 이미지를 생성 할 수 있습니다. 자른 이미지가 base64로 인코딩되는 이유는 ==
으로 끝나지 않습니다. 이 유용 경우 가, 여기 내가 사용하고 날카로운 라이브러리 : 마지막에 http://sharp.dimens.io/en/stable/api-resize/#max