gpt4 book ai didi

ios - Obj-C 检查图像是否已存在于照片库中

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:49 25 4
gpt4 key购买 nike

在我的应用程序中,我必须实现保存图像功能。我已经设法像这样保存:

  UIImage *image = [UIImage imageNamed:actualBackground];
UIImageWriteToSavedPhotosAlbum(
image, self,
@selector(thisImage:hasBeenSavedInPhotoAlbumWithError:usingContextInfo:),
nil);

/* ... */

- (void)thisImage:(UIImage *)image
hasBeenSavedInPhotoAlbumWithError:(NSError *)error
usingContextInfo:(void *)ctxInfo {
if (!error){
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
[self presentViewController:picker animated:YES completion:nil];
}
}

不幸的是,我必须检查文件是否已经存在以防止冗余保存。这也是必要的,因为多次保存同一图像不会覆盖一个文件,但它会创建它的副本...

你知道如何解决这个问题吗?

解决方案:

根据 Shravya Boggarapu 的回答,我将 assetUrl 存储在我的 NSUserDefaults 中。完整代码:

- (IBAction)onDownloadClick:(UIButton *)sender {
UIImage *image = [UIImage imageNamed:actualBackground];

NSString *key = [NSString stringWithFormat:@"assetsUrl %@", actualBackground];
NSString *savedValue =
[[NSUserDefaults standardUserDefaults] stringForKey:key];
NSURL *url = [NSURL URLWithString:savedValue];
if (url != nil) {
PHFetchResult *fetch =
[PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObject:url]
options:nil];
if ([fetch count]) {
UIAlertView *myAlert = [[UIAlertView alloc]
initWithTitle:nil
message:NSLocalizedString(@"Already downloaded", nil)
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[myAlert show];
return;
}
}
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

[library
writeImageToSavedPhotosAlbum:image.CGImage
orientation:(ALAssetOrientation)image.imageOrientation
completionBlock:^(NSURL *assetURL, NSError *error) {

[library assetForURL:assetURL
resultBlock:^(ALAsset *asset) {
NSLog(@"assetURL %@", assetURL);
NSString *ass = [assetURL absoluteString];
[[NSUserDefaults standardUserDefaults]
setObject:ass
forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];

UIAlertView *myAlert = [[UIAlertView alloc]
initWithTitle:nil
message:NSLocalizedString(
@"Image downloaded", nil)
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[myAlert show];
}
failureBlock:^(NSError *error){
}];
}];
}

希望对大家有所帮助。

最佳答案

我有一个解决方案,但不是适用于所有情况的解决方案。

关于将图像保存到相机胶卷的事情是,当您将图像添加到相机胶卷时会创建一个 assetURL。此外,此 Assets URL 每次都是新的,因此如果您保存到相机胶卷,它会创建一个副本。图像的名称也不会保留。

如果图像首先通过您的应用添加到相机胶卷,那么您可以将 assetURL 存储为图像信息的一部分。

在我的应用程序中,为每个包含一些关键信息的图像维护了一个字典。如果图像保存到相机胶卷,这包括图像的 assetURL。

获得 URL 后,您可以使用 fetchAssetsWithALAssetURLs:options: 函数检查其是否存在。

如果 URL 为 nil 或获取时的 Assets 为 nil,则表示该图片不存在于相册中。所以你可以重新添加。

关于ios - Obj-C 检查图像是否已存在于照片库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32713432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com