网上找了很多的资料貌似都没有很好的解决这个问题。
先简单的描述下,照片是我从服务器获取到的,一个大小为8M的jpg图片,下载后保存到了沙盒,然后根据沙盒中的图像使用这个方法来存到相册
UIImageWriteToSavedPhotosAlbum(_:_:_:_:)
结果是,大小为8M的图,存到相册这有3M左右了。
ps:别问怎么看的照片大小,看照片大小的方式很多种,iTunes,微信,调用Photos
requestImage(for:targetSize:contentMode:options:resultHandler:)都可以查看图片的大小。
图片的信息全都没有了,创建日期显示的为当前日期。
各个论坛找了一遍最后解决了,但是原因还是不能具体的描述很清楚
解决办法是:
直接获取当前要存储照片的url,然后使用以下方法存入相册。
creationRequestForAssetFromImage(atFileURL:)
猜测:
UIImageWriteToSavedPhotosAlbum(_:_:_:_:)
方法会导致元数据丢失以及由于解压和重新压缩而导致大小改变,特别是jpeg它本身就是压缩格式,
下载后放到UIImage里会有压缩以及一些特别的处理,所以尽量不直接去用UIImage去存,而是使用URL。
最后的最后放个整段代码:
//imageUrl为图片的路径
PHPhotoLibrary.requestAuthorization { status in
if case .authorized = status {
DispatchQueue.main.async {
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromImage(atFileURL: imageUrl!)
}) { (success, error) in
if let error = error {
print(error)
} else {
print("保存成功")
}
}
}
}
}