将照片保存到“相机胶卷”时,AVCaptureMovieFileOutput导致方向错误

|| 我对captureStillImageAsynchronouslyFromConnection有一个奇怪的问题。如果在镜像视频时使用jpegStillImageNSDataRepresentation保存图像,则会将相机胶卷中的图像顺时针旋转90度。但是,如果未镜像,则方向很好。 我将发布代码,其他人有这个问题/知道如何解决吗? 更新:只需运行一些测试,高度和宽度(640x480)很好,可以反映设备的方向。当我拍摄人像照片时,它报告UIImageOrientationLeft,而当镜像时,报告UIImageOrientationLeftMirrored。 更新2:当我在相机胶卷中查看保存的照片时,图像的预览方向正确,当在照片之间滑动时,图像的预览方向也正确,但是当照片完全加载后,图像旋转90度。这可能是相机胶卷问题吗? (我在4.3.3上)
- (void) captureImageAndSaveToCameraRoll
{
    AVCaptureConnection *stillImageConnection = [AVCamUtilities connectionWithMediaType:AVMediaTypeVideo fromConnections:[[self stillImageOutput] connections]];
    if ([stillImageConnection isVideoOrientationSupported])
        [stillImageConnection setVideoOrientation:[self orientation]];

    [[self stillImageOutput] captureStillImageAsynchronouslyFromConnection:stillImageConnection
                                                         completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {

                                                             ALAssetsLibraryWriteImageCompletionBlock completionBlock = ^(NSURL *assetURL, NSError *error) {
                                                                 if (error) {
                                                                     if ([[self delegate] respondsToSelector:@selector(captureManager:didFailWithError:)]) {
                                                                         [[self delegate] captureManager:self didFailWithError:error];
                                                                     }
                                                                 }
                                                             };

                                                             if (imageDataSampleBuffer != NULL) {
                                                                 NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
                                                                 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

                                                                 UIImage *image = [[UIImage alloc] initWithData:imageData];
                                                                 [library writeImageToSavedPhotosAlbum:[image CGImage]
                                                                                           orientation:(ALAssetOrientation)[image imageOrientation]
                                                                                       completionBlock:completionBlock];
                                                                 [image release];

                                                                 [library release];
                                                             }
                                                             else
                                                                 completionBlock(nil, error);

                                                             if ([[self delegate] respondsToSelector:@selector(captureManagerStillImageCaptured:)]) {
                                                                 [[self delegate] captureManagerStillImageCaptured:self];
                                                             }
                                                         }];
}
    
已邀请:
        我想知道您新创建的图像是否真的像您在此处假设的那样设置了方向:
[library writeImageToSavedPhotosAlbum:[image CGImage] orientation: (ALAssetOrientation) [image imageOrientation] completionBlock:completionBlock];
特别是
[image imageOrientation]
可能是问题的根源,特别是需要强制转换时... 您说您正在某处看到图像方向,是使用creating2ѭ之后创建的:
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation: imageDataSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
我想知道您是否假设此元数据实际上是在仅包含图像像素数据的情况下从“ 6”返回的“ 5”中?     
        根据一些报道,2009年iPhone的照片应用程序根本不支持任何镜像方向。当然,他们可能会部分修复此问题,但在某些情况下仍然存在错误(例如,我知道UIImageView在某些情况下不能正确处理
contentStretch
)。这应该足够容易测试:将博客中的样本图像加载到相机胶卷中,然后看看会发生什么。     
        上传后,为iOS UIImagePickerController结果图像方向中描述的UIImage创建类别 在将其保存到库之前,在图像上调用此方法。     

要回复问题请先登录注册