Неверный формат JPEG: отсутствует маркер SOI

Пытаюсь расшифровать изображение и записать в файл.

Это мой код:

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

Я не знаком с Go, так нужно ли ему декодировать base-64 для изображения в кодировке base-64?

Andrew Morton 15.05.2018 22:57

оно делает. Под xml_parser.go он возвращает []byte.

user7903682 15.05.2018 23:06

@AndrewMorton, возможно, ты прав! Как узнать, что он закодирован в base64?

user7903682 15.05.2018 23:07

@ user7903682 Я декодировал "" / 9j / 4AAQSkZJRg == "и получил" ???? JFIF »и« JFIF »раздали его.

Andrew Morton 15.05.2018 23:09

вот и все! Благодарность

user7903682 15.05.2018 23:14
Применение градиента к изображению с помощью CSS
Применение градиента к изображению с помощью CSS
Здравствуйте, братья и сестры, как дела? Недавно я застрял на применении градиента к изображению. Я применял это много раз, но иногда наши требования...
Получение URL-адреса изображения курса в Moodle с помощью PHP
Получение URL-адреса изображения курса в Moodle с помощью PHP
Moodle - это популярная система управления обучением с открытым исходным кодом, используемая многими учебными заведениями и организациями по всему...
2
5
5 808
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Данные для изображения, которое вы показываете, имеют кодировку base-64.

Декодирование Base-64 "/ 9j / 4AAQSkZJRg ==" ("==" дополняет его до правильной длины) дает "???? JFIF". Важная подсказка - это «JFIF», который показывает, что данные изображения действительно закодированы в кодировке base-64.

Чтобы получить изображение, вам необходимо декодировать строку base-64, представляющую данные изображения.

Я столкнулся с этой проблемой, потому что использовал ссылку Imgur на изображение страница (например, https://imgur.com/VXM2I36) вместо фактического URL-адреса изображения (например, https://i.imgur.com/VXM2I36.jpg).

Частично проблема заключается в том, что кнопка «Копировать ссылку» на Imgur фактически не дает прямой ссылки на изображение, как отмечено в этот ответ.

Другие вопросы по теме