如何通过base64算法转换图像?

How an image get converted by base64 algorithm?

我在 https://en.wikipedia.org/wiki/Base64 中读到 Man 这个词是如何通过 base64 转换成 TWFu 的algorithm,我想知道图像是如何通过相同的算法转换的,毕竟这个转换需要字节,将它们分成 6 组,然后寻找它们的 ASCII 值。

我的问题是,一张图片如何变成base64编码的字符串? 我想要一个描述从我们将图像保存在计算机中到它成为 base64 字符串的流程的答案。

我希望在答案中解释的术语是: pixels/dpi/ppi/1bit/8bit/24bit/Mime.

当您使用 <input type="file>" 以 html 形式上传 任何 文件时,它会以与存储在您的计算机或设备。浏览器不检查文件格式是什么,并将其视为字节块。有关转账详情,请参阅

Base64 不是图像编码器,它是字节编码器,重要区别。无论您传递给它什么,无论是图片、mp3 还是字符串 "ilikepie" - 它都会占用这些 字节 并生成它们的文本表示形式。它不了解您的 pixels/dpi/ppi/1bit/8bit/24bit/Mime 列表中的任何内容,这将是读取那些原始字节的软件的业务。

每个请求I want an answer that describes the flow from when we save the image in our computer until it's become 64base string.

要获得 base64 表示:

  • 打开画图,画一个笑脸。
  • 将该笑脸保存为 smile.png
  • Paint 使用其 png encoder 将像素位图转换为字节流,然后对其进行压缩并附加 headers,以便在看到这些字节再次知道如何显示它们。
  • 图像以字节序列写入磁盘。
  • 您 运行 在 smile.png 上使用 base64 编码器。
  • base64 从磁盘读取位置 smile.png 引用的字节并转换它们的表示并显示结果。

要在浏览器中显示该 base64 表示:

  • 浏览器收到一个 resource encoded with base64,看起来像 data:image/png;base64,blahblah...
  • 浏览器获取 image/png 部分并知道其后的数据将是 png 图像的字节。
  • 然后它看到 base64, 并知道下一个 blob 需要先进行 base64 解码,然后才能由其 png 解码器解码。
  • 它将 base64 字符串转换为字节。
  • 它将这些字节传递给它的 png 解码器。
  • 它获得一个位图图形,然后可以显示。

每张图片都是由很多像素点组成的,像素点的数量由图片的分辨率决定。

图像分辨率 - 一行中的像素数和行数。 例如分辨率为 800x600 的图像有 800 行和 600 行像素。

每个像素都有位深度 - 位数代表像素。 例如,位深度为 1,每个像素由一位表示,并且只有 2 个选项(0 或 1 - 黑色或白色)。

图片可以保存为多种不同的格式。最常见的是位图、jpeg、gif。无论使用何种格式,图像总是在计算机屏幕上显示为 bitmap(未压缩格式)。每种格式的保存方式都不同。

  • jpeg- 是一种 24 位(位深)格式。当您存储图像时,它以压缩形式工作,您会丢失一些图像数据。

  • gif- 最多 8 位(位深)格式。可以通过删除其调色板中的某些颜色来优化 gif 图像。这是一种无损格式。

只是把这个扔进去以澄清字节数:

  • "The word MAN gets converted into TWFu by using the base64 algorithm, I was wondering how an image gets converted by the same algorithm, after all this conversion takes Bytes, divide them into groups of 6 and then looking for their ASCII value."

  • "My question is, How an image becomes base64 string?"

更正: MAN 变为 TUFO。实际上 Man 变成了 TWFu,如上所示。

现在开始澄清...

图像的字节值(二进制数)可以用 hex notation 表示,这使得可以将那些相同的字节处理为 字符串 。十六进制的范围从 0F 这意味着..范围从 09 然后它是 A = 10F = 15。给出 16 个可能的值。

十六进制也称为Base16.

  • 字节转换为 Base64 很简单:数字从 Base16 转换为 Base64
  • 0 to F 的十六进制范围在 Base64 有效字符范围内,因此可以写成 Base64。

例如:

  • JPEG格式的开头3个字节总是ff d8 ff
  • 与 Base64 相同的是:/9j/ ...(参见这些示例 and

您可以通过 :

进行测试
  • 在下载的免费十六进制编辑器中打开任何.jpg图像。您也可以尝试在线十六进制编辑器,但大多数不会 复制 到剪贴板。此 online HEX viewer 将允许 Select/Copy 但您必须手动删除复制的十六进制文本中所有那些额外的减号 -ie: 在某些文本编辑器中使用查找和替换选项),或 skip/avoid 在任何 copy/paste 之前选择它们。

  • 转到此 Data Converter 并重新键入或 copy/paste 尽可能多的字节(从开始 FF 到任何 X 金额)放入 [HEX] 框中,然后按其下方的 decode。这会将这些字节显示为 Base64,甚至会告诉您每个字节的十进制值。