Using EncodeToPNG to save an image to disk

I’m trying to load a sprite from the Resources folder, create a copy of a sprite’s Texture2D, and save that data to disk as a png file. Here is what I’ve got so far:

Sprite itemBGSprite = Resources.Load<Sprite>( "_Defaults/Item Images/_Background" );
Texture2D itemBGTex = itemBGSprite.texture;
byte[] itemBGBytes = itemBGTex.EncodeToPNG();
                
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create( formattedCampaignPath + "/Item Images/Background.png" );
bf.Serialize( file , itemBGBytes );
file.Close();

This succeeds in creating a file called Background.png in the correct folder in the correct location; however, the file turns out 1 KB in size and corrupted.

My assumption is that the issue lies with EncodeToPNG–however, all of the answers here about EncodeToPNG seem to be years out-of-date, and the page ostensibly documenting the EncodeToPNG method no longer exists. Am I doing something wrong here? Is there some new alternative to EncodeToPNG that I should be using instead?

Oh, wait–I totally figured it out. The issue was with using FileStream and BinaryFormatter, not EncodeToPNG. This new (much tighter) code totally works!

Sprite itemBGSprite = Resources.Load<Sprite>( "_Defaults/Item Images/_Background" );
Texture2D itemBGTex = itemBGSprite.texture;
byte[] itemBGBytes = itemBGTex.EncodeToPNG();
File.WriteAllBytes( formattedCampaignPath + "/Item Images/Background.png" , itemBGBytes );

The image encoding and decoding methods for PNG, JPG, EXR, and Targa are implemented via the ImageConversion class as extensions to Texture2D. They are thus documented on a separate page.

I am not sure which Unity version made this change, but this accounts for the OP’s difficulty in finding the documentation.