图像上传旋转其他方式

时间:2017-01-23 08:02:36

标签: ios swift3

let image_data = UIImageJPEGRepresentation(self.imagetoadd.image!,0.0)

ios中的图像,使用swift 3来执行此操作正在上传。我怎么能解决这个问题?

1 个答案:

答案 0 :(得分: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