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

时间:2017-03-08 08:17:26

标签: windows file image-processing base64

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

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

我希望将在答案中解释的条款是: 的像素/ DPI / PPI / 1位/ 8位/ 24位/ MIME

4 个答案:

答案 0 :(得分:11)

Base64不是图像编码器,它是字节编码器,重要的区别。无论你传递什么,无论是图片,mp3还是字符串“ilikepie” - 它都需要那些字节并生成它们的文本表示。它对connect列表中的任何内容都不了解,这将是读取这些原始字节的软件的业务。

根据请求connect (loginWindow, &login::loginRequest, this, &homeWindow::setVisible);

要获得base64表示:

  • 打开油漆,画一个笑脸。
  • 将笑脸保存为pixels/dpi/ppi/1bit/8bit/24bit/Mime
  • Paint使用其 png encoder 将像素的位图转换为压缩的字节流并附加标头,以便当它再次看到这些字节时,它知道如何显示它们
  • 图像以字节为单位写入磁盘。
  • 您在I want an answer that describes the flow from when we save the image in our computer until it's become 64base string.上运行了base64编码器。
  • base64从smile.png引用的位置读取磁盘中的字节并转换它们的表示并显示结果。

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

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

答案 1 :(得分:2)

每个图像都由许多像素组成,像素数由图像分辨率决定。

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

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

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

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

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

答案 2 :(得分:2)

将这个用于字节澄清:

  
      
  • “使用base64算法将单词MAN转换为TWFu,我想知道图像是如何被转换的   算法,在所有这个转换采用字节后,将它们分成   6个组,然后查找它们的ASCII值。“

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

  •   

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

现在澄清......

图像的字节值(二进制数)可以用hex notation表示,这样就可以处理与字符串相同的字节。十六进制的范围从0F,这意味着......范围从09,然后是A = 10向上{{1 }} = F。给出16个可能的值。

Hex也称为 Base16

  • 字节转换为Base64只是:从Base16转换为Base64的数字
  • 15的十六进制范围在Base64有效字符内,因此可以写为Base64。

例如:

  • JPEG格式的起始3个字节始终为0 to F
  • 与Base64相同的是:ff d8 ff ...(请参阅这些link1link2的示例)

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

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

  • 转到此Data Converter并重新输入或复制/粘贴多个字节(从开始-到任何 X 金额)到{{ 1}}框并按下它下面的FF。这将向您显示这些字节为Base64,甚至告诉您每个字节的十进制值。

答案 3 :(得分:0)

当您使用<input type="file>"以html格式上传任何文件时,它会以与您计算机或设备上存储的格式完全相同的形式传输到服务器。浏览器不检查哪种文件格式,并将其作为字节块进行处理。有关转帐详情,请参阅How does HTTP file upload work?