【问题标题】:When does a base64 encoded png image not end with '='什么时候base64编码的png图像不以'='结尾
【发布时间】:2018-03-10 15:33:26
【问题描述】:

我最近一直在使用sharp库在节点中进行图像处理,并让我的服务返回新图像的base64编码。我的问题似乎很简单:base64 编码的图像是否总是以== 结尾?如果不是,在处理 jpeg/png 时有什么区别?我的理解是,无论格式如何,编码都应该是相同的,但这让我不这么认为。在测试期间,我决定进行单元测试来验证我的响应主体(base64 图像)是否以= 结尾。 我发现如果我不使用sharp.max() 调整图像大小但保持比例,则测试将通过。如果我将其关闭并调整为我喜欢的任何高度/宽度参数,测试将失败。还值得注意的是,这种行为仅限于 png,而不是 jpeg。

这是我的调整大小功能:

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==

对于示例的 sn-p 表示歉意,我的 base64 太大了,我无法在此处包含。我正在使用https://codebeautify.org/base64-to-image-converter 来测试图像是否良好,并且我可以看到两者都以正确的尺寸生成了预期的图像。为什么裁剪后的图像编码为 base64 不以== 结尾? 如果有用,这里是我正在使用的Sharp库:http://sharp.dimens.io/en/stable/api-resize/#max

【问题讨论】:

    标签: node.js image base64


    【解决方案1】:

    末尾的= 不是终结符,而是填充:

    https://en.wikipedia.org/wiki/Base64#Output_padding

    所以你是否看到它取决于你正在编码的对象的字节大小。

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 2011-10-21
      • 2021-05-28
      相关资源
      最近更新 更多