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; } }
我在堆栈溢出的地方看到了它,并且也包含在我的项目中。