Как я могу получить имя изображения, которое выбрано в библиотеке фотографий в iphone?
Я собираю изображение из библиотеки фотографий в приложении iphone. Как получить фактическое имя изображения.
в классе .h
UIImageView * imageView;
UIButton * choosePhotoBtn;
в .m классе
-(IBAction) getPhoto:(id) sender
{
UIImagePickerController * picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
if((UIButton *) sender == choosePhotoBtn)
{
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
else
{
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
}
[self presentModalViewController:picker animated:YES];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[picker dismissModalViewControllerAnimated:YES];
imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}
Как получить фактическое имя изображения?
Я новый в iphone. Пожалуйста, помогите мне.
Спасибо заранее.
Ответы
Ответ 1
импортируйте AssetsLibrary в свой файл:
#import <AssetsLibrary/AssetsLibrary.h>
И, в - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
ставить
// get the ref url
NSURL *refURL = [info valueForKey:UIImagePickerControllerReferenceURL];
// define the block to call when we get the asset based on the url (below)
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *imageAsset)
{
ALAssetRepresentation *imageRep = [imageAsset defaultRepresentation];
NSLog(@"[imageRep filename] : %@", [imageRep filename]);
};
// get the asset library and fetch the asset based on the ref url (pass in block above)
ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init];
[assetslibrary assetForURL:refURL resultBlock:resultblock failureBlock:nil];
чтобы получить имя изображения в журнале.
* не забудьте добавить существующую структуру: AssetsLibrary.framework
Шаги:
- В навигаторе проекта выберите свой проект
- Выберите цель
- Выберите вкладку "Сборка фаз"
- Открыть расширитель 'Link Binaries With Libraries'
- Нажмите кнопку "+"
- Выберите фреймворк
- (необязательно) Перетащите добавленную инфраструктуру в группу "Frameworks"
Источник:
http://www.raywenderlich.com/forums/viewtopic.php?f=2&p=34901
& Амп;
Как добавить существующие фреймворки " в Xcode 4?
Ответ 2
Если вы строите цель iOS 9+, вы увидите кучу предупреждений об устаревании с помощью ALAssetsLibrary, то есть:
'assetForURL (_: resultBlock: failureBlock:)' устарел в iOS 9.0: Использовать fetchAssetsWithLocalIdentifiers: options: на PHAsset для извлечения активов по локальному идентификатору (или для поиска PHAssets с помощью ранее известного ALAssetPropertyAssetURL используйте fetchAssetsWithALAssetURLs: options:) from вместо рамки
Как описано в предупреждении, вы должны использовать PHAsset. Например, используя swift 2.x, вам нужно добавить import Photos
в свой файл. Затем в методе didFinishPickingMediaWithInfo
UIImagePickerControllerDelegate используйте fetchAssetsWithALAssetURLs
, чтобы получить имя файла:
if let imageURL = info[UIImagePickerControllerReferenceURL] as? NSURL {
let result = PHAsset.fetchAssetsWithALAssetURLs([imageURL], options: nil)
let filename = result.firstObject?.filename ?? ""
}
Это установит filename
как-то вроде "IMG_0007.JPG".
Ответ 3
Простая быстрая реализация:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
if let referenceUrl = info[UIImagePickerControllerReferenceURL] as? NSURL {
ALAssetsLibrary().assetForURL(referenceUrl, resultBlock: { asset in
let fileName = asset.defaultRepresentation().filename()
//do whatever with your file name
}, failureBlock: nil)
}
}
}
Помните о: import AssetsLibrary
Ответ 4
В Objective C используйте рамку Photos и импортируйте Photos/Photos.h
Затем в вашей функции imagePickerController
добавьте следующее, чтобы получить имя файла из библиотеки фотографий
NSURL *refURL = [info valueForKey:UIImagePickerControllerReferenceURL];
PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:@[refURL] options:nil];
NSString *filename = [[result firstObject] filename];
Ответ 5
Хотя вы можете получить последний компонент пути и использовать его как имя файла, это не рекомендуется делать. Эти имена файлов назначаются системой iTunes для понимания во время синхронизации и не предназначены для доступа программистов, поскольку в будущем они могут быть заменены другими изображениями.
Хороший круг для этого - назначить текущую дату как имена файлов, а также сохранить изображения, выбранные из галереи. Вы можете сохранить его в своих документах или в библиотечном каталоге и использовать файл PList для сопоставления изображений с их именем.
В качестве альтернативы вы также можете назначать уникальные номера в качестве имен файлов и получать доступ к изображениям, используя эти значения.
Ответ 6
В Swift 3 и iOS8 +.filename больше не доступно. Он по-прежнему доступен через self.valueForKey( "filename" ), но не совсем законный.
Тем не менее, я нашел этот ответ в вопросе "Рамки фотографий iOS8: как получить имя (или имя файла) от PHAsset?" , чтобы быть коротким, простым и законным.
Ответ 7
Реализация Objective C, работающая на iOS 10. ALAssetsLibrary кажется устаревшим, поэтому вы должны использовать PHAsset:
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
NSURL *imageURL = [info valueForKey:UIImagePickerControllerReferenceURL];
PHAsset *phAsset = [[PHAsset fetchAssetsWithALAssetURLs:@[imageURL] options:nil] lastObject];
NSString *imageName = [phAsset valueForKey:@"filename"];
UIImage *photo = [info valueForKey:UIImagePickerControllerOriginalImage];
NSLog(@"Picked image: %@ width: %f x height: %f",imageName, photo.size.width, photo.size.height);
[picker dismissViewControllerAnimated:YES completion:nil];
}
Ответ 8
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
let imageUrl = info[UIImagePickerControllerReferenceURL] as! NSURL
let imageName = imageUrl.lastPathComponent
let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let photoURL = NSURL(fileURLWithPath: documentDirectory)
let localPath = photoURL.appendingPathComponent(imageName!)
let image = info[UIImagePickerControllerOriginalImage]as! UIImage
let data = UIImagePNGRepresentation(image)
do
{
try data?.write(to: localPath!, options: Data.WritingOptions.atomic)
}
catch
{
// Catch exception here and act accordingly
}
self.dismiss(animated: true, completion: nil);
}
Ответ 9
var fileName: String = "Attachment"
if let imageURL = info[UIImagePickerControllerReferenceURL] as? URL {
let assets = PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil)
let assetResource = PHAssetResource.assetResources(for: assets.firstObject!)
fileName = assetResource.first?.originalFilename ?? "Attachment"
}
print(fileName)