let image_data = UIImageJPEGRepresentation(self.imagetoadd.image!,0.0)
Изображение в ios, я использую swift 3 для этого, загружается с возможностью поворота. Как я могу решить такую вещь?изображение загружено повернуто другим способом
let image_data = UIImageJPEGRepresentation(self.imagetoadd.image!,0.0)
Изображение в ios, я использую swift 3 для этого, загружается с возможностью поворота. Как я могу решить такую вещь?изображение загружено повернуто другим способом
Изображения 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.