我正在使用 ALAsset 来检索这样的图像:
[[asset defaultRepresentation] fullResolutionImage]]
这将返回 CGImageRef ,我想尽快将其保存到磁盘...
解决方案1:
UIImage *currentImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
NSData *currentImageData = UIImagePNGRepresentation(currentImage);
[currentImageData writeToFile:filePath atomically:YES];
解决方案2:
CFURLRef url = (__bridge CFURLRef)[NSURL fileURLWithPath:filePath];
CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypePNG, 1, NULL);
CGImageDestinationAddImage(destination, [[asset defaultRepresentation] fullResolutionImage], nil);
CGImageDestinationFinalize(destination);
问题是这两种方法在设备上执行起来都很慢。每张图片我需要大约 2 秒来执行此操作。这绝对是太长了。
问题:如何加快此图像保存过程?或者也许有更好的解决方案?
更新:
这两种解决方案的最佳性能改进是将图像保存为 JPEG 格式而不是 PNG。所以对于解决方案 1 已替换UIImagePNGRepresentation
为UIImageJPEGRepresentation
. 对于解决方案 2 已替换kUTTypePNG
为kUTTypeJPEG
.
还值得注意的是,第二种解决方案比第一种解决方案的内存效率更高。