uiimagepickercontroller - получить имя изображения, выбранного из библиотеки фотографий
Я пытаюсь загрузить изображение с моего iPhone/iPod touch в мой онлайн-репозиторий. Я успешно выбрал изображение из фотоальбома, но столкнулся с одной проблемой: мне нужно знать имя изображения, например image1.jpg или что-то еще. как это. Как бы я знал название выбранного изображения.
2 ответа
Я думаю, знание точного имени изображения не будет проблемой, а получение уникального имени для выбранного изображения решит вашу задачу, чтобы вы могли загрузить изображение на сервер и отслеживать его по его имени. Может быть, это может помочь вам
NSMutableString *imageName = [[[NSMutableString alloc] initWithCapacity:0] autorelease];
CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID) {
[imageName appendString:NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID))];
CFRelease(theUUID);
}
[imageName appendString:@".png"];
После того, как вы выберете изображение из Picker, вы можете сгенерировать уникальное имя и присвоить его выбранному изображению. ура
Вместо использования обычного метода выбора изображений (UIImage*)[info valueForKey:UIImagePickerOriginalImage]
который дает вам выбранное изображение в качестве экземпляра UIImage, вы можете использовать AssetsLibrary.framework
и экспортируйте фактический исходный файл (включая формат, имя и все метаданные). Это также имеет преимущество сохранения исходного формата файла (png или jpg).
#import <AssetsLibrary/AssetsLibrary.h>
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[self dismissPicker];
// try to get media resource (in case of a video)
NSURL *resourceURL = [info objectForKey:UIImagePickerControllerMediaURL];
if(resourceURL) {
// it's a video: handle import
[self doSomethingWith:resourceURL];
} else {
// it's a photo
resourceURL = [info objectForKey:UIImagePickerControllerReferenceURL];
ALAssetsLibrary *assetLibrary = [ALAssetsLibrary new];
[assetLibrary assetForURL:resourceURL
resultBlock:^(ALAsset *asset) {
// get data
ALAssetRepresentation *assetRep = [asset defaultRepresentation];
CGImageRef cgImg = [assetRep fullResolutionImage];
NSString *filename = [assetRep filename];
UIImage *img = [UIImage imageWithCGImage:cgImg];
NSData *data = UIImagePNGRepresentation(img);
NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSURL *tempFileURL = [NSURL fileURLWithPath:[cacheDir stringByAppendingPathComponent:filename]];
BOOL result = [data writeToFile:tempFileURL.path atomically:YES];
if(result) {
// handle import
[self doSomethingWith:resourceURL];
// remove temp file
result = [[NSFileManager defaultManager] removeItemAtURL:tempFileURL error:nil];
if(!result) { NSLog(@"Error removing temp file %@", tempFileURL); }
}
}
failureBlock:^(NSError *error) {
NSLog(@"%@", error);
}];
return;
}
}