I don’t see a way to specify the image format when using display.capture() to save the file, it only saves as png for me.
On the other hand, display.save() does have parameters to provide a file name and file extension, and it does reflect the file format by the file extension used; png, jpg, and bmp are all valid (I checked the file headers), and I can see the artifact issue when saving to jpg.
If you can find a way to save the files to the photo library while using display.save then you can try using bmp as the file format, otherwise, you can also use display.captureBounds() instead.
Of course, all these are just workarounds, I got weird results when saving the files; the image resolution was set at an odd number depending on the scaling used in config.lua, sometimes it was only on the width and others at both, width and height. For this reason, if you can use display.captureBounds() then you can be certain to always use even numbers for the screenBounds as maybe those extra lines are the faded ones.
Just additional info per source code, saving as png can result in 24 or 32 bit; it’s saving as 32 for me, while jpg’s are saving as 24 bit. BMP’s are also saving as 32bit and without artifact issues, but I don’t know if you’ll encounter any issues in iOS.