#go #riff
#Вперед #riff
Вопрос:
Я только что попытался загрузить изображение webp с URL, но обнаружил что-то другое при попытке обработать сохраненное изображение.
Если я загружаю изображение из браузера, его можно декодировать с помощью x/image/webp
пакета, но если я сохраняю изображение с помощью http.Get()
, а затем создаю новый файл, то io.Copy()
на изображении написано:
«отсутствует заголовок фрагмента РИФФ»
Я предполагаю, что мне нужно написать заголовок фрагмента риффа, когда я сохраняю его, используя код golang.
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())
}
Вот URL-адрес IMG-URL
Комментарии:
1. Где находится URL?
2. @devdotlog Извините за это, отредактировано с URL. Спасибо!
3. Я добился успеха. просто URL: = » sony.com/is/image/gwtprod /… «, filename = «test.png».
4. Да, я могу отлично загрузить это с помощью golang, но основная проблема в том, что когда я использовал загруженное изображение с golang, оно не может быть обработано пакетом x / image / webp и ответил «отсутствует заголовок фрагмента RIFF», возможно, я добавлю больше кода для обработки изображения
Ответ №1:
загружаемый файл не относится к типу webp. это png.
package main
import (
"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())
}