从url存储图像时如何编写RIFF块头?

我只是尝试从 url 下载 webp 图像,但是当我尝试处理存储的图像时,我发现了一些不同的东西。

如果我从浏览器下载图像,它可以使用x/image/webp包解码,但如果我使用存储图像http.Get()然后创建一个新文件然后io.Copy()图像,它说:

“缺少 RIFF 块头”

我假设在使用 golang 代码存储它时需要编写一些 RIFF 块标头。

func main(){

    response, e := http.Get(URL)

    if e != nil {

        log.Fatal(e)

    }

    defer response.Body.Close()


    //open a file for writing

    file, err := os.Create('tv.webp')

    if err != nil {

        log.Fatal(err)

    }

    defer file.Close()


    // Use io.Copy to just dump the response body to the file. This supports huge files

    _, err = io.Copy(file, response.Body)

    if err != nil {

        log.Fatal(err)

    }

    fmt.Println("Success!")


    imgData, err := os.Open("tv.webp")

    if err != nil {

        fmt.Println(err)

        return

    }

    log.Printf("%+v", imgData)

    image, err := webp.Decode(imgData)

    if err != nil {

        fmt.Println(err)

        return

    }

    fmt.Println(image.Bounds())

}


当年话下
浏览 212回答 1
1回答

翻过高山走不出你

下载文件不是webp类型。这是png。package mainimport (    "fmt"    "image"    "io"    "log"    "net/http"    "os"    _ "image/png")func main() {    response, e := http.Get("https://www.sony.com/is/image/gwtprod/0abe7672ff4c6cb4a0a4d4cc143fd05b?fmt=png-alpha")    if e != nil {        log.Fatal(e)    }    defer response.Body.Close()    file, err := os.Create("dump")    if err != nil {        log.Fatal(err)    }    defer file.Close()    _, err = io.Copy(file, response.Body)    if err != nil {        log.Fatal(err)    }    fmt.Println("Success!")    imageFile, err := os.Open("dump")    if err != nil {        panic(err)    }    m, name, err := image.Decode(imageFile)    if err != nil {        panic(err)    }    fmt.Println("image type is ", name, m.Bounds())}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go