如何将图片编码成base64?

图片的 base64 编码在多种上下文中都很有用。当需要通过旨在处理文本数据的媒体存储或传输图片时,它通常会被使用,比如嵌入到网页或者通过 API 上传图片。这篇文章将介绍如何使用 Go 标准库得到任何图片的 base64 编码的值。

在 Go 中将图片转换为其 base64 表示很容易。所有你需要做的是将文件读取为字节 slice并使用包 encoding/base64 对其进行编码。

处理本地图片

首先,让我们处理本地文件系统中的图片文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package main
import (
"encoding/base64"
"fmt"
"io/ioutil"
"log"
"net/http"
)
func toBase64(b []byte) string {
return base64.StdEncoding.EncodeToString(b)
}
func main() {
// 读取文件到 byte slice
bytes, err := ioutil.ReadFile("./flower.jpg")
if err != nil {
log.Fatal(err)
}
var base64Encoding string
// 得到当前文件的格式
mimeType := http.DetectContentType(bytes)
// 根据MIME 类型添加适当的 URI 方案头
switch mimeType {
case "image/jpeg":
base64Encoding += "data:image/jpeg;base64,"
case "image/png":
base64Encoding += "data:image/png;base64,"
}
// 添加 base64 编码的输出
base64Encoding += toBase64(bytes)
// 打印图片的完整 base64 表示
fmt.Println(base64Encoding)
}

第一步是通过 ioutil.ReadFile() 将图片文件读取为字节切片。接下来,用于获取 http.DetectContentType() 的 MIME 类型文件,以便将相应的数据 URI 方案标头附加到 base64 编码的输出。之后,调用该函数 toBase64() 它使用 base64.StdEncoding.EncodeToString() 方法检索 图片的 base64 编码。此函数调用的结果将追加到 URI 方案标头。

运行此代码后,它会将图片的 base64 编码打印到提供的标准输出。

您可以复制 base64 字符串并将其直接粘贴到浏览器的地址栏中。它应该显示整个图片,如下所示。

处理远程图片

将通过URL提供的图片转换为其 base64 编码, 与我们上面已经看到的没有太大区别。您需要做的就是 对图片进行 GET 请求,然后将响应正文读取成字节切片。之后,该过程的其余部分与使用本地图片相同。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package main
import (
"encoding/base64"
"fmt"
"io/ioutil"
"log"
"net/http"
)
func toBase64(b []byte) string {
return base64.StdEncoding.EncodeToString(b)
}
func main() {
resp, err := http.Get("https://freshman.tech/images/dp-illustration.png")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
var base64Encoding string
mimeType := http.DetectContentType(bytes)
switch mimeType {
case "image/jpeg":
base64Encoding += "data:image/jpeg;base64,"
case "image/png":
base64Encoding += "data:image/png;base64,"
}
base64Encoding += toBase64(bytes)
fmt.Println(base64Encoding)
}

本文技术点是通过http.DetectContentType获取图片类型,以及如何编码图片的base4形式。

祝你阅读愉快。

翻译自 How to retrieve the base64 encoding for any image in Go