JPEG格式无效:缺少SOI标记

时间:2018-05-15 20:46:54

标签: image go jpeg

尝试解码图像并写入文件。

这是我的代码:

package main

import (
        "bytes"
        "fmt"
        "github.com/reteps/gopowerschool"
        "image/jpeg"
)

func main() {
        client := gopowerschool.Client("https://example.com")
        session, userID, err := client.CreateUserSessionAndStudent("username", "password")
        if err != nil {
                panic(err)
        }   
        response, err := client.GetStudentPhoto(&gopowerschool.GetStudentPhoto{UserSessionVO: session, StudentID: userID})
        if err != nil {
                panic(err)
        }   
        fmt.Println(string(response.Return_))
        image, err := jpeg.Decode(bytes.NewReader(response.Return_))
        if err != nil {
                panic(err)
        }   
        fmt.Println(image)

}

图片是:

/9j/4AAQSkZJRg....VNpSP8f6VmE4oopks//Z

当我尝试解码图像的[]字节时,它给出了一个错误。

panic: invalid JPEG format: missing SOI marker

2 个答案:

答案 0 :(得分:0)

您显示的图像数据似乎是base-64编码。

Base-64解码" / 9j / 4AAQSkZJRg ==" (" =="将其填充到正确的长度)给出" ???? JFIF&#34 ;.重要的提示是" JFIF",它表明图像数据确实是base-64编码。

要获取图像,您需要对表示图像数据的字符串进行base-64解码。

答案 1 :(得分:0)

我遇到此问题是因为我使用的是指向图像页面的Imgur链接(例如https://imgur.com/VXM2I36),而不是图像的实际URL(例如https://i.imgur.com/VXM2I36.jpg

部分问题是,如this answer中所述,Imgur上的“复制链接”按钮实际上并未提供直接链接至图像。