gpt4 book ai didi

ios - UIImagePickerControllerReferenceURL 总是返回 nill

转载 作者:可可西里 更新时间:2023-11-01 03:52:02 25 4
gpt4 key购买 nike

我正在尝试使用以下代码获取我刚刚从相机捕获的图像的名称。但是 [info objectForKey:@"UIImagePickerControllerReferenceURL"] 总是返回 nil。如何获取 URL?

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
self.myinfo = info;
NSLog(@"Dismissing camera ui...");
[self.cameraUI dismissViewControllerAnimated:YES completion:nil];

NSLog(@"Getting media url...");
NSString *mediaURL = [info objectForKey:UIImagePickerControllerMediaURL];
NSLog(@"Media url = %@", mediaURL);

NSLog(@"Getting media type...");
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
NSLog(@"Selected mediaType: %@", mediaType);

if(mediaURL) {
NSLog(@"This is a video = %@", mediaURL);

if (![mediaType isEqualToString:(NSString*)kUTTypeVideo]) {
UISaveVideoAtPathToSavedPhotosAlbum(mediaURL, self, @selector(video:didFinishSavingWithError:contextInfo:), NULL);
}
} else {
NSLog(@"This is a photo...");
self.originalImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage];

if (self.source == UIImagePickerControllerSourceTypeCamera && [mediaType isEqualToString:(NSString*)kUTTypeImage]) {
// Image captured from camera
NSLog(@"Saving new image...");

if (self.source != UIImagePickerControllerSourceTypePhotoLibrary) {
UIImageWriteToSavedPhotosAlbum(self.originalImage, self,
@selector(image:didFinishSavingWithError:usingContextInfo:), nil);
}
}
// Image selected from previous images.
else {
NSLog(@"Getting reference url...");
self.referenceURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"];
NSLog(@"Reference url = %@", [self.referenceURL absoluteString]);

[self saveAssetData:self.originalImage :info];
}
}
}

- (void)image:(UIImage *)image
didFinishSavingWithError:(NSError *)error
usingContextInfo:(void*)ctxInfo {

if (error) {
NSLog(@"Resim kaydedilemedi: %@", [error localizedDescription]);
NSString *title = @"Resim kaydedilemedi!";
NSString* message = @"Resim kaydedilirken hata oluştu!";
[self alertStatus:message:title];
} else {
NSLog(@"Save asset data...");
[self saveAssetData:image :self.myinfo];
}
}

- (void)saveAssetData:(UIImage*)originalImage :(NSDictionary*)info {
self.assetLibrary = [[ALAssetsLibrary alloc] init];
NSURL *url = [info objectForKey:@"UIImagePickerControllerReferenceURL"];

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *asset)
{
ALAssetRepresentation *assetRep = [asset defaultRepresentation];

NSString *filename = [assetRep filename];
NSLog(@"File name = %@", filename);

if(self.selectedMediaNames == nil)
self.selectedMediaNames = [[NSMutableArray alloc] init];

[self.selectedMediaNames addObject:filename];
[self.tableView reloadData];
[self.activitIndicator stopAnimating];
[self.activitIndicator setHidden:true];

HMXSharedDataManager *sharedDataManager =
[HMXSharedDataManager sharedManager];

[sharedDataManager.uploaMedias addObject:originalImage];
[sharedDataManager.uploaMediaNames addObject:filename];
};

ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *error)
{
NSLog(@"%@", error);
};

[self.assetLibrary assetForURL:url resultBlock:resultblock failureBlock:failureblock];
}

更新:

有点晚了,但这里是我如何获取图像或视频的名称:

  • 检查 UIImagePickerControllerMediaURL,如果它是 null 媒体是一个图像,如果不是它是一个视频
  • 如果图片或视频刚刚拍摄或录制,请将其保存到相册
  • 使用ALAssetsLibrary查询文件名。

这是保存和获取媒体的代码:

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
@try {
[self.cameraUI dismissViewControllerAnimated:YES completion:nil];
mediaURL = [info objectForKey:UIImagePickerControllerMediaURL];

// If mediaURL is not null this should be a video
if(mediaURL) {

// This video is new just recorded with camera
if (self.source == UIImagePickerControllerSourceTypeCamera) {
// First save the video to photos album
ALAssetsLibrary *library = [ALAssetsLibrary new];
[library writeVideoAtPathToSavedPhotosAlbum:mediaURL completionBlock:^(NSURL *assetURL, NSError *error){
if (error) {
DDLogDebug(@"Failed to save the photo to photos album...");
} else {
// Get the name of the video
[self getMediaName:nil url:assetURL];
}
}];
} else { // This is a video that recorded before
// Get the name of the video
[self getMediaName:nil url:[info objectForKey:UIImagePickerControllerReferenceURL]];
}
}
// This is an image
else {
self.originalImage = (UIImage*)[info objectForKey:UIImagePickerControllerOriginalImage];

// This image is new just taken with camera
if (self.source == UIImagePickerControllerSourceTypeCamera) {
// First save the image to photos album
ALAssetsLibrary *library = [ALAssetsLibrary new];
[library writeImageToSavedPhotosAlbum:[self.originalImage CGImage]
orientation:(ALAssetOrientation)[self.originalImage imageOrientation]
completionBlock:^(NSURL *assetURL, NSError *error){
if (error) {
DDLogDebug(@"Failed to save the vide to photos album...");
} else {
// Get the name of the image
[self getMediaName:self.originalImage url:assetURL];
}
}];
} else { // This is an image that taken before
// Get the name of the image
[self getMediaName:self.originalImage
url:[info objectForKey:@"UIImagePickerControllerReferenceURL"]];
}
}
}
@catch (NSException *exception) {
DDLogError(@"%@", [exception description]);
}
}

获取媒体名称的实际方法:

- (void)getMediaName:(UIImage*)originalImage url:(NSURL*)url {
@try {
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *asset) {
if (asset == nil) return;
ALAssetRepresentation *assetRep = [asset defaultRepresentation];
NSString *fileName = [assetRep filename];
// Do what you need with the file name here
};

ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *error) {
DDLogError(@"Failed to get image or video name : %@", error);
};

ALAssetsLibrary *library = [ALAssetsLibrary new];
[library assetForURL:url resultBlock:resultblock failureBlock:failureblock];
}
@catch (NSException *exception) {
DDLogError(@"%@", [exception description]);
}
}

最佳答案

您在应用程序中使用相机拍摄的图像没有名称。它总是零。您必须以编程方式将该图像保存在照片库中,并且可以使用您想要的任何名称进行保存。

关于ios - UIImagePickerControllerReferenceURL 总是返回 nill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23103826/

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