載入和儲存影象
在儲存器中,影象可以被視為畫素(顏色)的矩陣。但是,當影象儲存在永久儲存器中時,它可以按原樣儲存(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
}