載入和儲存影象
在儲存器中,影象可以被視為畫素(顏色)的矩陣。但是,當影象儲存在永久儲存器中時,它可以按原樣儲存(RAW 格式),點陣圖或其他具有特定壓縮演算法的影象格式,以節省儲存空間,例如 PNG,JPEG,GIF 等。載入影象時對於特定格式,必須使用相應的演算法將影象解碼為 image.Image
。一個 image.Decode
函式宣告為
func Decode(r io.Reader) (Image, string, error)
提供此特定用法。為了能夠處理各種影象格式,在呼叫 image.Decode
函式之前,解碼器必須通過定義為 image.RegisterFormat
的函式進行註冊。
func RegisterFormat(name, magic string,
decode func(io.Reader) (Image, error), decodeConfig func(io.Reader) (Config, error))
目前,影象包支援三種檔案格式: JPEG , GIF 和 PNG 。要註冊解碼器,請新增以下內容
import _ "image/jpeg" //register JPEG decoder
到應用程式的 main
包。在程式碼中的某處(main
包中不需要),要載入 JPEG 影象,請使用以下程式碼段:
f, err := os.Open("inputimage.jpg")
if err != nil {
// Handle error
}
defer f.Close()
img, fmtName, err := image.Decode(f)
if err != nil {
// Handle error
}
// `fmtName` contains the name used during format registration
// Work with `img` ...
儲存到 PNG
要將影象儲存為特定格式,必須明確匯入相應的編碼器,即
import "image/png" //needed to use `png` encoder
然後可以使用以下程式碼段儲存影象:
f, err := os.Create("outimage.png")
if err != nil {
// Handle error
}
defer f.Close()
// Encode to `PNG` with `DefaultCompression` level
// then save to file
err = png.Encode(f, img)
if err != nil {
// Handle error
}
如果要指定 DefaultCompression
級別以外的壓縮級別,請建立編碼器,例如
enc := png.Encoder{
CompressionLevel: png.BestSpeed,
}
err := enc.Encode(f, img)
儲存為 JPEG
要儲存為 jpeg
格式,請使用以下命令:
import "image/jpeg"
// Somewhere in the same package
f, err := os.Create("outimage.jpg")
if err != nil {
// Handle error
}
defer f.Close()
// Specify the quality, between 0-100
// Higher is better
opt := jpeg.Options{
Quality: 90,
}
err = jpeg.Encode(f, img, &opt)
if err != nil {
// Handle error
}
儲存到 GIF
要將影象儲存為 GIF 檔案,請使用以下程式碼段。
import "image/gif"
// Samewhere in the same package
f, err := os.Create("outimage.gif")
if err != nil {
// Handle error
}
defer f.Close()
opt := gif.Options {
NumColors: 256,
// Add more parameters as needed
}
err = gif.Encode(f, img, &opt)
if err != nil {
// Handle error
}