[ExpFeat] Fixes saving screenshots to Photos as JPEGs

This commit is contained in:
Riley Testut 2023-06-16 16:57:00 -05:00
parent 99417b418a
commit 4cf705f141
2 changed files with 21 additions and 14 deletions

View File

@ -1171,27 +1171,34 @@ extension GameViewController
let imageScale = ExperimentalFeatures.shared.gameScreenshots.size?.rawValue ?? 1.0 let imageScale = ExperimentalFeatures.shared.gameScreenshots.size?.rawValue ?? 1.0
let imageSize = CGSize(width: snapshot.size.width * imageScale, height: snapshot.size.height * imageScale) let imageSize = CGSize(width: snapshot.size.width * imageScale, height: snapshot.size.height * imageScale)
let format = UIGraphicsImageRendererFormat() let screenshotData: Data
format.scale = 1 if imageScale == 1, let data = snapshot.pngData()
let renderer = UIGraphicsImageRenderer(size: imageSize, format: format) {
// No need to redraw image because it's already the correct size.
let scaledSnapshot = renderer.image { (context) in screenshotData = data
context.cgContext.interpolationQuality = .none
snapshot.draw(in: CGRect(origin: .zero, size: imageSize))
} }
else
{
let format = UIGraphicsImageRendererFormat()
format.scale = 1
let renderer = UIGraphicsImageRenderer(size: imageSize, format: format)
screenshotData = renderer.pngData { (context) in
context.cgContext.interpolationQuality = .none
snapshot.draw(in: CGRect(origin: .zero, size: imageSize))
}
}
if ExperimentalFeatures.shared.gameScreenshots.saveToPhotos if ExperimentalFeatures.shared.gameScreenshots.saveToPhotos
{ {
PHPhotoLibrary.runIfAuthorized PHPhotoLibrary.runIfAuthorized
{ {
PHPhotoLibrary.saveUIImage(image: scaledSnapshot) PHPhotoLibrary.saveImageData(screenshotData)
} }
} }
if ExperimentalFeatures.shared.gameScreenshots.saveToFiles if ExperimentalFeatures.shared.gameScreenshots.saveToFiles
{ {
guard let data = scaledSnapshot.pngData() else { return }
let screenshotsDirectory = FileManager.default.documentsDirectory.appendingPathComponent("Screenshots") let screenshotsDirectory = FileManager.default.documentsDirectory.appendingPathComponent("Screenshots")
do do
@ -1220,7 +1227,7 @@ extension GameViewController
do do
{ {
try data.write(to: fileName) try screenshotData.write(to: fileName)
} }
catch catch
{ {

View File

@ -25,11 +25,11 @@ extension PHPhotoLibrary
}) })
} }
static func saveUIImage(image: UIImage) static func saveImageData(_ data: Data)
{ {
// Save the image to the Photos app // Save the image to the Photos app
PHPhotoLibrary.shared().performChanges({ PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAsset(from: image) PHAssetCreationRequest.forAsset().addResource(with: .photo, data: data, options: nil)
}, completionHandler: { success, error in }, completionHandler: { success, error in
if success if success
{ {