Problem: You have an image and want to save it to a file.
Solution: Use the Encode method of the correct file format package (e.g., png.Encode for PNG files) to encode the image into a file.
If you can load an image from a file you might also want to save it back to a file. Saving images requires you to import the actual format packages because the encoders are specific to the formats (which makes sense if you think about it):
import "image/png"
If you need to decode and encode, just the preceding code will do; you don’t need to import the package and name it with an underscore:
func save(filePath string, img *image.NRGBA) { imgFile, err := os.Create(filePath) if err != nil { log.Println("Cannot create file:", err) } defer imgFile.Close() png.Encode(imgFile, img.SubImage(img.Rect)) }
First, you create the file. Then use png.Encode (or jpeg.Encode or gif.Encode ) to encode the image to the file. You might notice that this example uses the SubImage method in the struct instance. This is because Encode takes in the Image interface as a parameter (as it should). You need to make the NRGBA into an Image so you use the SubImage method and pass in the dimensions of the entire image, which is found in the Rect value.