2017-01-23 6 views

ответ

1

Изображения JPEG обычно содержат словарь EXIF, здесь хранятся много информации о том, как было сделано изображение, одним из них является поворот изображения.
UIImage экземпляры хранят эту информацию (если исходное изображение имеет ее), а также внутри определенного свойства, называемого imageOrientation.
Насколько я помню, эта информация разорвана с помощью метода UIImageJPEGRepresentation.
Чтобы создать правильный экземпляр данных с вышеуказанной информацией, вы должны использовать методы Core Graphics или нормализовать вращение перед отправкой изображения.
Для нормализации изображения что-то вроде этого должно быть достаточно:

CGImageRef cgRef = imageToSave.CGImage; 
UIImage * fixImage = [[UIImage alloc] initWithCGImage:cgRef scale:imageToSave.scale orientation:UIImageOrientationUp]; 

Чтобы сохранить информацию о ротации:

CFURLRef url = (__bridge_retained CFURLRef)[NSURL fileURLWithPath:path];//Save data path 
NSDictionary * metadataDictionary = [self imageMetadataForPath:pathToOriginalImage]; 
CFMutableDictionaryRef metadataImage = (__bridge_retained CFMutableDictionaryRef) metadata; 
CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypeJPEG, 1, NULL); 
CGImageDestinationAddImage(destination, image, metadataImage); 
if (!CGImageDestinationFinalize(destination)) { 
    DLog(@"Failed to write image to %@", path); 
} 

Где -imageMetadataForPath:

- (NSDictionary*) imageMetadataForPath:(NSString*) imagePath{ 
    NSURL *imageURL = [NSURL fileURLWithPath:imagePath]; 
    CGImageSourceRef mySourceRef = CGImageSourceCreateWithURL((__bridge CFURLRef)imageURL, NULL); 
    NSDictionary * dict = (NSDictionary *) CFBridgingRelease(CGImageSourceCopyPropertiesAtIndex(mySourceRef,0,NULL)); 
    CFRelease(mySourceRef); 
    return dict; 
} 

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

Если вы хотите узнать больше о вращении, вот link.

Смежные вопросы