图片的 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() { bytes, err := ioutil.ReadFile("./flower.jpg") 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) }
|
第一步是通过 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