当用户拍照时,我目前正在抓取照片:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *image = info[UIImagePickerControllerOriginalImage];
// create a jpeg
NSData *jpegData = UIImageJPEGRepresentation(image, 1.0f);
// write jpeg image to file in app space
NSString *filePath =
// create file path in app space
[imageData writeToFile:filePath atomically:NO];
}
这很好用,文件是用其 EXIF 数据创建的 jpeg。
现在我想将图像缩小一点以使其更小。但是,我想保留原始 UIImage 中存在的部分或全部 EXIF 数据,并将其复制到缩放后的图像中。
当前缩放图像:
UIImage *scaledImage = [renderer imageWithActions:^(UIGraphicsImageRendererContext*_Nonnull myContext) {
[image drawInRect:(CGRect) {.origin = CGPointZero, .size = size}];
}];
这可以很好地创建一个缩放图像,但是它不包含任何 EXIF 数据。
有没有办法缩放图像并保留原始图像的 EXIF 数据?我可以从原始图像中获取 EXIF 数据并将其复制到缩放图像吗?
我也搜索了很多ALAssetsLibrary现在已弃用的答案。似乎替代方案是PhotoKit. 其中指出:
在 iOS 和 macOS 中,PhotoKit 提供了支持为照片应用程序构建照片编辑扩展的类。在 iOS 和 tvOS 中,PhotoKit 还提供对照片应用程序管理的照片和视频资产的直接访问。
但是我没有使用照片应用程序,我的图像不是来自本地照片库或 icloud,因为我只想将照片存储在我的私人应用程序空间中。