Подтвердить что ты не робот

Как я могу получить имя изображения, которое выбрано в библиотеке фотографий в 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. Пожалуйста, помогите мне.

Спасибо заранее.

4b9b3361

Ответ 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 для сопоставления изображений с их именем.

В качестве альтернативы вы также можете назначать уникальные номера в качестве имен файлов и получать доступ к изображениям, используя эти значения.

Ответ 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)