【问题标题】:How an image get converted by base64 algorithm?base64算法如何转换图像?
【发布时间】:2017-03-18 23:54:33
【问题描述】:

在我读到 https://en.wikipedia.org/wiki/Base64 中关于如何使用 base64 算法 将单词 Man 转换为 TWFu 之后,我想知道图像是如何得到的用相同的算法转换,在所有这个转换需要字节后,将它们分成6个组,然后寻找它们的ASCII值。

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

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

【问题讨论】:

  • 我也这么认为。 1 ASCII 是 1 个字节,因此像素是(在某些图像类型中)
  • 我投票结束这个问题,因为它太宽泛且不清楚。请求的术语与 base64 编码无关,它们已经在别处进行了解释。此外,问题的范围变化太多且太频繁。
  • @ThomasWeller,即使操作人员不完全理解相关术语,您也应该向@John Jones 学习如何回答一个广泛的问题,您在这里的评论不是建设性的和多余的。我认为琼斯的这句话It has no understanding of anything in your pixels/dpi/ppi/1bit/8bit/24bit/Mime list 是答案的建设性部分。
  • 你应该学会遵守网站的规则,不要问太宽泛的问题。已经有一个很好的答案,然后被删除了,因为你改变了问题。
  • @ThomasWeller 我同意你的观点,但在 Asker 的辩护中,他不确定这些元素中的哪些(如果有的话)对最终的 base64 字符串有贡献。它总是看起来太宽泛了。

标签: windows file image-processing base64


【解决方案1】:

Base64 不是图像编码器,它是字节编码器,重要的区别。无论您传递什么,无论是图片、mp3 还是字符串“ilikepie” - 它都会获取这些 bytes 并生成它们的文本表示。它不了解您的 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 将像素位图转换为字节流,并对其进行压缩和附加标头,以便在再次看到这些字节时知道如何显示它们。
  • 图像以一系列字节的形式写入磁盘。
  • 您在 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 解码器。
  • 它得到一个位图图形,然后可以显示。

【讨论】:

【解决方案2】:

每张图像由许多像素组成,像素的数量由图像分辨率决定。

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

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

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

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

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

【讨论】:

    【解决方案3】:

    只是为了澄清字节而把它扔进去:

    • MAN这个词通过base64算法转换成TWFu,我想知道一个图像是如何被相同的 算法,在所有这个转换需要字节之后,将它们分成 6 个一组,然后查找它们的 ASCII 值。”

    • “我的问题是,图像如何变成 base64 字符串?”

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

    现在开始澄清......

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

    Hex 也称为 Base16

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

    例如:

    • JPEG格式的前3个字节总是ff d8 ff
    • 与 Base64 相同的是:/9j/ ...(请参阅这些 link1link2 中的示例)

    您可以通过以下方式进行测试:

    • 在下载的免费十六进制编辑器中打开任何.jpg 图像。您也可以尝试在线十六进制编辑器,但大多数不会复制到剪贴板。此online HEX viewer 将允许选择/复制,但您必须手动删除复制的十六进制文本中所有多余的减号-ie: 在一些文本编辑器),或在任何复制/粘贴之前跳过/避免选择它们。

    • 转到此Data Converter 并在[HEX] 框中重新键入或复制/粘贴尽可能多的字节(从FF 开始直到任何X 数量)并按decode 在它下面。这会将这些字节显示为 Base64,甚至告诉您每个字节的十进制值。

    【讨论】:

      【解决方案4】:

      当您使用<input type="file>" 以html 格式上传任何文件时,它会以与存储在您的计算机或设备上完全相同的格式传输到服务器。浏览器不会检查文件格式是什么,并将其特征化为字节块。转账详情见How does HTTP file upload work?

      【讨论】:

        猜你喜欢
        • 2015-12-18
        • 1970-01-01
        • 2014-11-03
        • 1970-01-01
        • 1970-01-01
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多