我正在嘗試導入 2 個 png 圖像并將一個粘貼到另一個之上。輸出將是 jpeg。當我運行下面的代碼時,我得到了這個錯誤:image: unknown formatimage: unknown formatpanic: runtime error: invalid memory address or nil pointer dereference[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x109d7a4]goroutine 1 [running]:main.main()每當我使用“ Bounds() ”方法時都會出錯。你認為是什么原因。代碼:func main() { imgFile1, err := os.Open("./pics/00/body.png") if err != nil { fmt.Println(err) } defer imgFile1.Close() imgFile2, err := os.Open("./pics/01/face.png") if err != nil { fmt.Println(err) } defer imgFile2.Close() img1, _, err := image.Decode(imgFile1) if err != nil { fmt.Println(err) } img2, _, err := image.Decode(imgFile2) if err != nil { fmt.Println(err) } //new rectangle for the second image sp1 := image.Point{0,0} sp2 := image.Point{img1.Bounds().Dx(),img1.Bounds().Dy()} r2 := image.Rectangle{sp1, sp2} //create new image rgba := image.NewRGBA(r2) //draw the two images into this new image draw.Draw(rgba, r2, img1, image.Point{0, 0}, draw.Src) draw.Draw(rgba, r2, img2, image.Point{0, 0}, draw.Src) //export it out, err := os.Create("./output.jpg") if err != nil { fmt.Println(err) } defer out.Close() var opt jpeg.Options opt.Quality = 80 jpeg.Encode(out, rgba, &opt)}
1 回答

繁花不似錦
TA貢獻1851條經(jīng)驗 獲得超4個贊
我不確定為什么 Go 有兩種解碼方式。如果您知道文件類型,我認為最好只使用特定的包:
package main
import (
"fmt"
"image/png"
"net/http"
)
const ava = "http://gravatar.com/avatar/5ec9c21c8d54825b04def7a41998d18d"
func main() {
r, err := http.Get(ava)
if err != nil {
panic(err)
}
defer r.Body.Close()
i, err := png.Decode(r.Body)
if err != nil {
panic(err)
}
dx := i.Bounds().Dx()
fmt.Println(dx)
}
如果您堅持使用其他方法,則需要添加一個導入(感謝mkopriva):
import (
"image"
_ "image/png"
)
https://godocs.io/image/png#Decode
- 1 回答
- 0 關注
- 140 瀏覽
添加回答
舉報
0/150
提交
取消