Я использую -writeImageToSavedPhotosAlbum
для отправки изображений в библиотеку фотографий. Проблема, с которой я столкнулся, заключается в том, что, несмотря на указание ориентации, изображения в конечном итоге имеют неправильную ориентацию.
На самом деле кажется, что ориентированные AVCaptureVideoOrientationPortrait
в конечном итоге выглядят как AVCaptureVideoOrientationPortraitUpsideDown
,
и AVCaptureVideoOrientationLandscapeLeft
в конечном итоге выглядят как AVCaptureVideoOrientationLandscapeRight
и наоборот.
Есть ли причина, по которой это происходит? Вот еще некоторые подробности:
У меня нет ViewController, выполняющего автоматическое изменение ориентации моего представления.
На всех изображениях [image imageOrientation]
равно AVCaptureVideoOrientationPortrait
, но я отслеживаю фактическую ориентацию и передаю ее в -writeImageToSavedPhotosAlbum
независимо.
Я использую: -writeImageToSavedPhotosAlbum: Ориентация: ЗавершениеБлок:
Я был бы признателен, если бы кто-нибудь мог пролить свет на это.
ОБНОВЛЕНИЕ:
Несмотря на то, что я читал в документации,
Если вы хотите сохранить объект UIImage, вы можете использовать метод UIImage CGImage, чтобы получить CGImageRef, и приведите imageOrientation изображения к ALAssetOrientation.
Я пошел дальше и изменил ориентацию, в которой прохожу:
switch (lastOrientation) {
case UIDeviceOrientationPortrait:
default:
alOrientation = ALAssetOrientationUp;
break;
case UIDeviceOrientationPortraitUpsideDown:
alOrientation = ALAssetOrientationDown;
break;
case UIDeviceOrientationLandscapeLeft:
alOrientation = ALAssetOrientationLeft;
break;
case UIDeviceOrientationLandscapeRight:
alOrientation = ALAssetOrientationRight;
break;
}
[library writeImageToSavedPhotosAlbum:[image CGImage]
orientation:(ALAssetOrientation) alOrientation// [image imageOrientation]
completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"completion block");
}];
Теперь все изображения ориентируются левым краем вниз, как если бы они были альбомными-правыми. У меня до сих пор нет правильного, но, по крайней мере, они у меня единообразно ориентированы.
Еще одно ОБНОВЛЕНИЕ:
Это работает. Почему, я не знаю:
switch (lockedOrientation) {
case UIDeviceOrientationPortrait:
default:
alOrientation = ALAssetOrientationRight; //3 instead ofALAssetOrientationUp;
break;
case UIDeviceOrientationPortraitUpsideDown:
alOrientation = ALAssetOrientationLeft; //2 insted of ALAssetOrientationDown;
break;
case UIDeviceOrientationLandscapeLeft:
alOrientation = ALAssetOrientationUp; //0 instead of ALAssetOrientationLeft;
break;
case UIDeviceOrientationLandscapeRight:
alOrientation = ALAssetOrientationDown; //1 instead of ALAssetOrientationRight;
break;
}
[library writeImageToSavedPhotosAlbum:[image CGImage]
orientation:(ALAssetOrientation) alOrientation// [image imageOrientation]
completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"completion block");
}];