我正在运行的一个功能:image.Decode()
image.Decode函数接收io.Reader&&并且io.Reader函数接受[]字节。
当我传入[] uint8时,如果给我这个错误:
panic: image: unknown format
如何将[] uint8转换为[]字节?
UPDATE错误发生在星号区域,因为image.Decode无法读取变量xxx。
package main
import (
"github.com/nfnt/resize"
"image"
"image/jpeg"
"fmt"
"launchpad.net/goamz/aws"
"launchpad.net/goamz/s3"
"bytes"
"encoding/json"
"io/ioutil"
"os"
"reflect"
)
type Data struct {
Key string
}
func main() {
useast := aws.USEast
connection := s3.New(auth, useast)
mybucket := connection.Bucket("bucketName")
image_data, err := mybucket.Get("1637563605030")
if err != nil {
panic(err.Error())
} else {
fmt.Println("success")
}
xxx := []byte(image_data)
******* THIS IS WHERE THE ERROR OCCURS **************
original_image, _, err := image.Decode(bytes.NewReader(xxx))
******* THIS IS WHERE THE ERROR OCCURS END **************
if err != nil {
fmt.Println("Shit")
panic(err.Error())
} else {
fmt.Println("Another success")
}
new_image := resize.Resize(160, 0, original_image, resize.Lanczos3)
if new_image != nil {
fmt.Println("YAY")
}
}
答案 0 :(得分:42)
The Go Programming Language Specification
uint8 the set of all unsigned 8-bit integers (0 to 255) byte alias for uint8
package main
import "fmt"
func ByteSlice(b []byte) []byte { return b }
func main() {
b := []byte{0, 1}
u8 := []uint8{2, 3}
fmt.Printf("%T %T\n", b, u8)
fmt.Println(ByteSlice(b))
fmt.Println(ByteSlice(u8))
}
输出:
[]uint8 []uint8
[0 1]
[2 3]
你误解了你的问题。
答案 1 :(得分:6)
正如其他答案所解释的那样,将[]uint8
传递到需要[]byte
的地方是没有问题的。如果这是您的问题,您将收到编译时错误。你不是。恐慌是运行时错误,当图像库读取切片中的数据时,它会被图像库抛出。
事实上,图像库只是你的问题。见http://golang.org/src/pkg/image/format.go。它返回错误消息,因为它无法识别切片中数据的图像格式。当image.Decode()
返回错误消息时,调用panic
的代码正在调用image.Decode()
。
答案 2 :(得分:-1)
如果您的变量imageData
为[]uint8
,则可以通过[]byte(imageData)