• Go中如何把图片转换成base64编码
  • 发布于 2个月前
  • 202 热度
    0 评论
  • 北风吹
  • 0 粉丝 49 篇博客
  •   
图片的 base64 编码在多种上下文中都很有用。当需要通过旨在处理文本数据的媒体存储或传输图片时,它通常会被使用,比如嵌入到网页或者通过 API 上传图片。这篇文章将介绍如何使用 Go 标准库得到任何图片的 base64 编码的值。在 Go 中将图片转换为其 base64 表示很容易。所有你需要做的是将文件读取为字节 slice 并使用包 encoding/base64 对其进行编码。

处理本地图片
首先,让我们处理本地文件系统中的图片文件:
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
 // 堆代码 duidaima.com
 // 得到当前文件的格式
 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 请求,然后将响应正文读取成字节切片。之后,该过程的其余部分与使用本地图片相同。
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 形式。
用户评论