Храните и используйте изображения из приложения «Камера» или «Альбом в iPad» - PullRequest
0 голосов
/ 02 августа 2011

Я разрабатываю приложение для iPad, в котором я позволяю пользователю создавать объект. Также я разрешаю ему / ей добавить 10 картинок к этому объекту. Они могут выбрать эти снимки из своей камеры или сделать новую (если у iPad есть камера).

Мой вопрос сейчас заключается в том, как лучше всего хранить эти фотографии? На мой взгляд, лучшим способом было бы использовать метод UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:finishedSavingWithError:contextInfo:), nil);. Таким образом, я всегда могу хранить (или использовать) изображения в фотоальбоме iPad. Но в этом случае мне нужно было бы что-то сохранить в базе данных, чтобы потом можно было снова получить изображение. Итак ... Как получить URL для пути к файлу внутри метода finishedSavingWithError:contextInfo: для хранения в базе данных?

Другим способом достижения моей цели было бы сохранить их в личной папке как:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
        NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
        if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
               UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
               imageView.image = image;

               [ImageManager saveImage:image atIndex:0];
       }
}

И мой saveImage метод выполняет следующие действия:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", index]]; 
[fileManager createFileAtPath:fullPath contents:imageData attributes:nil];

Или я должен хранить изображения как BLOB в базе данных sqlite?

Лично я думаю, что эти последние 2 возможности взорваны, потому что в основном вы храните все дважды. Если вы выберете изображение из вашей галереи, оно будет храниться локально (ваша галерея) PLUS в базе данных или в подкаталоге приложения. Что является пустой тратой пространства.

Каков наилучший способ сделать это, с точки зрения производительности?

А также, если я сохраню их в каталоге, сможет ли пользователь получить доступ к этому каталогу и удалить их?

Спасибо, что поделились своей мудростью!

1 Ответ

0 голосов
/ 02 августа 2011

Не думаю, что вы можете получить URL / путь к изображению, сохраненному с помощью UIImageWriteToSavedPhotosAlbum

Даже если бы это было возможно, я бы посоветовал вам сохранить изображения в вашем приложении. Экспортируя их в приложение «Фото», вы фактически удаляете изображения из своего приложения и объекта, для которого они были созданы.

Например, что произойдет, если кто-то удалил изображение из приложения «Фото», не осознавая / не помня, что изображение связано с вашим приложением? Вы не сможете предотвратить это.

Что касается метода сохранения (BLOB или файл), то любой из них приемлем. Я бы посоветовал вам взглянуть на изменение размера изображения перед сохранением, если только не требуется оригинальное изображение в полном размере. Есть много ресурсов для этого (например, UIImage: Resize, затем Crop )

...