IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    如何将图片编码成base64?

    smallnest发表于 2024-06-06 15:25:41
    love 0

    图片的 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



沪ICP备19023445号-2号
友情链接