使用 GPUImage 相机,我像这样设置我的相机
- (void)setupSessionWithImageView:(GPUImageView *)captureView
{
GPUImageStillCamera *stillCamera = [[GPUImageStillCamera alloc] init];
GPUImageGammaFilter *colorFilter = [[GPUImageGammaFilter alloc] init];
[stillCamera addTarget:colorFilter];
[colorFilter addTarget:captureView];
self.colorFilter = colorFilter;
self.stillCamera = stillCamera;
self.captureView = captureView;
[stillCamera startCameraCapture];
}
为了viewWillTransitionToSize:
在我的视图控制器上调用时模仿 Apple 的 iPad 相机,我更新outputImageOrientation
了静态相机上的。这会旋转视频预览,以便在 iPad 的方向改变时保持正确的方向。
- (void)setOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (interfaceOrientation == UIInterfaceOrientationUnknown) { // default to portrait if we don't know
interfaceOrientation = UIInterfaceOrientationPortrait;
}
self.stillCamera.outputImageOrientation = interfaceOrientation;
}
我的问题是,当我使用 iOS 9 使用此设置拍摄照片时,所有横向图像都会报告它们的大小,就好像它们是纵向图像一样(因此短边是宽度的测量值,长边是高度的测量值),但是它们正确地报告了它们的方向。iOS 9 指南中的新增功能并未表明对 AVFoundation 的任何更改,听起来它们可能会影响这一点。保留outputImageOrientation
as Portrait 解决了这个问题,但阻止我通过旋转视图来模仿 iPad 上的 Apple 原生相机功能。
- (void)captureImage
{
GPUImageStillCamera *stillCamera = self.stillCamera;
[stillCamera capturePhotoAsImageProcessedUpToFilter:self.colorFilter withCompletionHandler:^(UIImage *processedImage, NSError *error) {
NSLog(@"image orientation %ld", (long)processedImage.imageOrientation);
NSLog(@"image size %f width x %f height", processedImage.size.width, processedImage.size.height);
}];
}
我的 GPUImage 实现和/或我如何处理相机中的方向变化是否存在问题?整个示例项目可以在我的 git 页面上找到。在 iOS 8 和图像报告尺寸之前,准确地反映了它的方向属性。