UIImage方向Swift

我已经编写了这个代码来使用Swift中的AVFoundation库来捕获图像:

@IBAction func cameraButtonWasPressed(sender: AnyObject) { if let videoConnection = stillImageOutput.connectionWithMediaType(AVMediaTypeVideo){ stillImageOutput.captureStillImageAsynchronouslyFromConnection(videoConnection){ (imageSampleBuffer : CMSampleBuffer!, _) in let imageDataJpeg = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageSampleBuffer) var pickedImage: UIImage = UIImage(data: imageDataJpeg)! let library = ALAssetsLibrary() library.writeImageToSavedPhotosAlbum(pickedImage.CGImage, metadata:nil, completionBlock:nil) } } } 

它工作正常,但是当我去照片库图像显示逆时针旋转90度。

有人可以给我一个暗示,在哪里挖来解决这个问题?

你应该使用一个稍微不同的writeImage方法:

(1)从UIImage imageOrientation属性(一个枚举)获取方向,并将其转换为ALAssetOrientation(与UIImageOrientation具有相同Int值的枚举)

  var orientation : ALAssetOrientation = ALAssetOrientation(rawValue: pickedImage.imageOrientation.rawValue)! 

(2)在ALAssetLibrary上使用类似但不同的方法

 library.writeImageToSavedPhotosAlbum( pickedImage.CGImage, orientation: orientation, completionBlock:nil) 

在Objective-C中适用于我…我已经快速转换到Swift(如上所述),但是我得到编译器警告。

无法使用types为“(CGImage!,orientation:ALAssetOrientation,completionBlock:NilLiteralConvertible)”的参数列表调用“writeImageToSavedPhotosAlbum”

也许你可以尝试(我没有时间在Swift中构build一个完整的AVFoundationpipe道,以便明确地testing)

如果无法正常工作,另一种解决scheme是从sampleBuffer中提取exif元数据,并将其传递给您已经使用的方法

library.writeImageToSavedPhotosAlbum(pickedImage.CGImage, metadata:nil, completionBlock:nil

也许这个Swift代码可以帮助你。

 //correctlyOrientedImage.swift import UIKit extension UIImage { public func correctlyOrientedImage() -> UIImage { if self.imageOrientation == UIImageOrientation.Up { return self } UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) self.drawInRect(CGRectMake(0, 0, self.size.width, self.size.height)) var normalizedImage:UIImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return normalizedImage; } } 

我在堆栈溢出的地方看到了它,并且也包含在我的项目中。