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

Как вы получаете обрезанную версию изображения с помощью ALAsset?

Я пытаюсь получить обрезанную версию изображения, которое потянуло, используя ALAsset. В частности, я выбираю элементы из пользовательской Photo Library, а затем загружаю их. Проблема в том, что в представлении миниатюр библиотеки iOS показывает нам обрезанную версию. Когда вы выбираете эту миниатюру и извлекаете этот объект изображения с помощью ALAsset, я получаю версию с полным разрешением. Я провел некоторое исследование и не смог найти ничего, что помогло бы получить вторую систему координат, где происходит обрезка.

Чтобы протестировать его, вам нужно iOS5 отредактировать изображение в вашей библиотеке. Выберите изображение в библиотеке изображений, выберите "Редактировать" и обрезайте изображение. Когда вы получите ALAsset, вы получите полное изображение, а если вы синхронизируете с помощью iPhoto, iPhoto также вытащит полное изображение. Кроме того, вы можете изменить изображение и отменить его.

Вот как я получаю изображение:

UIImage *tmpImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];

Это дает мне изображение с полным разрешением, очевидно. Существует флаг fullScreenImage, который масштабирует изображение с полным разрешением до размера экрана. Это не то, что я хочу.

Класс ALAssetRepresenation имеет поле масштабирования, но это значение float, которое также я не хочу.

Если кто-нибудь скажет мне, где эта обрезанная система координат может быть найдена, я буду признателен.

4b9b3361

Ответ 1

Когда фотография была обрезана с помощью приложения iOS Photos, координаты обрезки можно найти в словаре метаданных ALAssetRepresentation. fullResolutionImage предоставит вам необрезанную фотографию, вы должны выполнить обрезку самостоятельно.

Метаданные AdjustmentXMP содержат не только координаты обрезки, но также указывают, были ли применены автоматическое улучшение или удаление красных глаз.

Как и в iOS 6.0 CIFilter предоставляет filterArrayFromSerializedXMP: inputImageExtent: error: Вероятно, вы можете использовать метаданные ALAsetRepresentation AdjustmentXMP здесь и применить CIFilter к полномуResolutionImage ALAssetRepresentation для воссоздания измененного изображения.

Помните, что приложение iOS Photos обрабатывает изображения JPG и RAW по-разному. Для изображений JPG в Camera Roll добавляется новый ALAset с метаданными XMP. Для изображений RAW в исходный ALAsset добавляется сообщение ALAssetRepresentation. Я не уверен, что это дополнительное ALAssetRepresentation является измененным изображением, и если у него есть метаданные AdjustmentXMP. Помимо изображений JPG и RAW, вы также должны проверить поведение изображений RAW + JPG.

Ответ 2

Ваши параметры:

Вариант 1 (ALAssetLibrary)

Используйте - (CGImageRef)fullScreenImage метод AlAssetRepresentation.

Плюсы:

  • Вся тяжелая работа для вас выполнена, вы получаете изображение, которое выглядит так же, как в приложении "Фотографии". Это включает в себя обрезку и другие изменения. Легко.

Минусы:

  • Разрешение - это "размер экрана", размер которого не меньше, чем используемое вами устройство, а не полное возможное разрешение обрезанного изображения. Если это вас не касается, то это идеальный вариант.

Вариант 2 (ALAssetLibrary)

Извлечь данные об урожае, используя ключ AdjustmentXMP в метаданных изображения (к чему относится @tom). Примените растение.

Преимущество:

  • Можно получить обрезанное изображение с максимально возможным разрешением.

против

  • Вы получаете только редактирование обрезки, а не любые другие настройки (например, красные глаза).
  • Кто знает, что Apple будет поддерживать в будущем в режиме "Редактирование", возможно, вам придется применить дополнительные изменения в будущем.
  • Сложный, вам сначала нужно проанализировать данные XML, чтобы прочитать прямоугольник обрезки, обрезать невращающееся изображение и затем применить поворот.

Вариант 3 (Желаемое мышление)

Попросите Apple включить такой метод, как fullResolutionEditedImage, который дает вам максимально возможную качественную фотографию со всеми внесенными изменениями.

Плюсы:

  • Все волшебное решение.

Минусы:

  • Apple никогда не сможет добавить этот метод.

Вариант 4 (UIImagePickerController)

Этот параметр применяется только в том случае, если вы используете средство выбора изображений, вы не можете использовать его напрямую с библиотекой ресурсов

В NSDictionary, возвращаемом -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

Вы можете извлечь полноразмерное скорректированное изображение с помощью клавиши UIImagePickerControllerOriginalImage. Сохраните это изображение где-нибудь. Затем, вместо того, чтобы извлекать изображение из библиотеки активов, загрузите созданную копию.

Плюсы:

  • Вы получаете изображение полного размера с настройками
  • Это единственный вариант, который Apple дает нам для получения полноразмерного изображения со всеми настройками (например, "красных глаз" и т.д.), а не только для урожая. Это особенно важно в iOS 7 с введением фильтров, которые могут кардинально изменить изображение.

Минусы:

  • Может использоваться только с устройством выбора изображений (не AlAssetRepresentation)
  • Вы должны хранить полноразмерную копию изображения. В зависимости от количества таких изображений использование диска в вашем приложении может существенно увеличиться.

Обновление для iOS 7: вы можете рассмотреть вариант 4 или вариант 1, так как iOS 7 поддерживает многие операции, подобные фильтрам, и ваши пользователи, вероятно, заметят если они отсутствуют. Эти два варианта поддерживают фильтры (и другие изменения), а опция 4 дает более высокий результат разрешения.