如何使用golang从文件系统中的base64字符串创建jpg/png图像

3

我是一个帮助翻译的助手。

我正在使用 Angular 从 REST 调用中向 Golang 服务器发送 base64 字符串。现在遇到的问题是如何使用该字符串创建图像。

我的代码:

func (server *Server) uploadImage(w http.ResponseWriter, r *http.Request) {

    decoder := json.NewDecoder(r.Body)
    defer r.Body.Close()
    var d model.ImageFile
    err := decoder.Decode(&d)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }
    fmt.Println(d.Source)
    fmt.Println(d.Destination)
    fmt.Println(d.Country)

    dir, errr := filepath.Abs(filepath.Dir(os.Args[0]))
    if errr != nil {
        fmt.Println(errr)
    }
    substring := dir[0:(len(dir) - 10)]

    unbased, err := base64.StdEncoding.DecodeString(d.ImageData)
    if err != nil {
        fmt.Println("Cannot decode b64")
    }

    r = bytes.NewReader(unbased)
    im, err := png.Decode(r)
    if err != nil {
        fmt.Println("Bad png")
    }

    f, err := os.OpenFile(substring+"images/"+"example.png", os.O_WRONLY|os.O_CREATE, 777)
    if err != nil {
        fmt.Println("Cannot open file")
    }

    png.Encode(f, im)

    server.R.Text(w, http.StatusOK, d.ID.Hex())
    return
}

请将您的代码添加到问题中。 - Jadeye
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - icza
1个回答

12

我会做类似这样的事情:

b := getB64PNG()
unbased, err := base64.StdEncoding.DecodeString(b)
if err != nil {
    panic("Cannot decode b64")
}

r := bytes.NewReader(unbased)
im, err := png.Decode(r)
if err != nil {
    panic("Bad png")
}

f, err := os.OpenFile("example.png", os.O_WRONLY|os.O_CREATE, 0777)
if err != nil {
    panic("Cannot open file")
}

png.Encode(f, im)

嗨,我正在从Angular发送Base64图像数据作为JSON格式。 - Mukesh Verma
我正在通过以下代码直接从我的JSON中传递base64字符串::::"unbased, err := base64.StdEncoding.DecodeString(d.ImageData)"。其中d是我的模型变量,ImageData是base64字符串。 - Mukesh Verma
更改变量名称。你的函数可能会接收r *http.Request,正如你所看到的,我正在定义另一个“r”变量。这就是为什么它告诉你正在将r(请求)用作io.Reader的原因。 - Maciej Długoszek
谢谢Maciej。这对我很有帮助。 :-) - Mukesh Verma
嗨,Maciej,上面的代码正在创建PNG图像,在我的情况下,用户可以选择两种类型的图像(PNG / JPG)。上传JPG图像时会出现错误。如何才能创建JPG图像呢? - Mukesh Verma
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接