Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从相机拍摄的iphone图像自动旋转90度_Ios_Objective C_Iphone_Xcode_Camera - Fatal编程技术网

Ios 从相机拍摄的iphone图像自动旋转90度

Ios 从相机拍摄的iphone图像自动旋转90度,ios,objective-c,iphone,xcode,camera,Ios,Objective C,Iphone,Xcode,Camera,在程序上,我已经在我的应用程序中从我的相机中获取了图像。它已经被很好地抓取了,但是当我切换到另一个视图并关闭该视图时,我的图像会自动旋转-90度 这种变化只发生在我移动之后的第一次,不发生变化意味着图像保持在-90度的状态,这只发生在我从相机上截取图像时。当我从照片库中获取图像时,没有发现任何问题 下面的图像是我的原始图像 这是旋转图像 我不知道为什么会发生这种变化。您必须使用此功能旋转相机拍摄的图像 - (void)imagePickerController:(UIImagePicker

在程序上,我已经在我的应用程序中从我的相机中获取了图像。它已经被很好地抓取了,但是当我切换到另一个视图并关闭该视图时,我的图像会自动旋转-90度

这种变化只发生在我移动之后的第一次,不发生变化意味着图像保持在-90度的状态,这只发生在我从相机上截取图像时。当我从照片库中获取图像时,没有发现任何问题

下面的图像是我的原始图像

这是旋转图像


我不知道为什么会发生这种变化。

您必须使用此功能旋转相机拍摄的图像

 - (void)imagePickerController:(UIImagePickerController *)picker
                didFinishPickingImage:(UIImage *)image
                                    editingInfo:(NSDictionary *)editingInfo
{
    image = [self scaleAndRotateImage:image];
    [self useImage:image];
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];
}


- (void)scaleAndRotateImage:(UIImage *)image
{
    int kMaxResolution = 320; // Or whatever

    CGImageRef imgRef = image.CGImage;

    CGFloat width = CGImageGetWidth(imgRef);
    CGFloat height = CGImageGetHeight(imgRef);

    CGAffineTransform transform = CGAffineTransformIdentity;
    CGRect bounds = CGRectMake(0, 0, width, height);
    if (width > kMaxResolution || height > kMaxResolution) {
        CGFloat ratio = width/height;
        if (ratio > 1) {
            bounds.size.width = kMaxResolution;
            bounds.size.height = bounds.size.width / ratio;
        }
        else {
            bounds.size.height = kMaxResolution;
            bounds.size.width = bounds.size.height * ratio;
        }
    }

    CGFloat scaleRatio = bounds.size.width / width;
    CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));
    CGFloat boundHeight;
    UIImageOrientation orient = image.imageOrientation;
    switch(orient) {

        case UIImageOrientationUp: //EXIF = 1
            transform = CGAffineTransformIdentity;
            break;

        case UIImageOrientationUpMirrored: //EXIF = 2
            transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
            transform = CGAffineTransformScale(transform, -1.0, 1.0);
            break;

        case UIImageOrientationDown: //EXIF = 3
            transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
            transform = CGAffineTransformRotate(transform, M_PI);
            break;

        case UIImageOrientationDownMirrored: //EXIF = 4
            transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);
            transform = CGAffineTransformScale(transform, 1.0, -1.0);
            break;

        case UIImageOrientationLeftMirrored: //EXIF = 5
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);
            transform = CGAffineTransformScale(transform, -1.0, 1.0);
            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
            break;

        case UIImageOrientationLeft: //EXIF = 6
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);
            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
            break;

        case UIImageOrientationRightMirrored: //EXIF = 7
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeScale(-1.0, 1.0);
            transform = CGAffineTransformRotate(transform, M_PI / 2.0);
            break;

        case UIImageOrientationRight: //EXIF = 8
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);
            transform = CGAffineTransformRotate(transform, M_PI / 2.0);
            break;

        default:
            [NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];

    }

    UIGraphicsBeginImageContext(bounds.size);

    CGContextRef context = UIGraphicsGetCurrentContext();

    if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) {
        CGContextScaleCTM(context, -scaleRatio, scaleRatio);
        CGContextTranslateCTM(context, -height, 0);
    }
    else {
        CGContextScaleCTM(context, scaleRatio, -scaleRatio);
        CGContextTranslateCTM(context, 0, -height);
    }

    CGContextConcatCTM(context, transform);

    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);
    UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [self setRotatedImage:imageCopy];
    //return imageCopy;
}
试试这个属性

@属性(非原子)CGAffineTransform cameraViewTransform


旋转-90度,然后拍摄图像。如果不起作用,请使用Cocoa提供的代码。

如果您仍然需要一些解决方案,请参考我发布此问题答案的链接,只需参考编辑和编辑1,也可以查看最后2或3条注释以供进一步参考。

克服此问题的最简单方法是缩放内部图像
didFinishPickingImage
delegate。通过导入类“
UIImage+ImageScaling.h
”,可以使用以下代码进行缩放


theImage=[UIImage-imageWithImage:image-scaledToSizeWithSameAspectRatio:CGSizeMake(400300)]
//对于iphone。

这是由于您的图像方向。因此,保持原始图像方向。您将在UIImagePickerController委托方法中获得图像方向

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
示例代码:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{

    UIImage *sourceImage = [info valueForKey:UIImagePickerControllerOriginalImage];

    NSData *data = UIImagePNGRepresentation(sourceImage);
    UIImage *tmp = [UIImage imageWithData:data];
    UIImage *afterFixingOrientation = [UIImage imageWithCGImage:tmp.CGImage
                                         scale:sourceImage.scale
                                   orientation:sourceImage.imageOrientation];

    [self.imagePickerController dismissViewControllerAnimated:YES completion:nil];
}

这个方法对我很管用

- (UIImage*) rotateImageAppropriately:(UIImage*)imageToRotate
{
   UIImage* properlyRotatedImage;

   CGImageRef imageRef = [imageToRotate CGImage];

   if (imageToRotate.imageOrientation == 0)
   {
       properlyRotatedImage = imageToRotate;
   }
   else if (imageToRotate.imageOrientation == 3)
   {

       CGSize imgsize = imageToRotate.size;
       UIGraphicsBeginImageContext(imgsize);
       [imageToRotate drawInRect:CGRectMake(0.0, 0.0, imgsize.width, imgsize.height)];
       properlyRotatedImage = UIGraphicsGetImageFromCurrentImageContext();
       UIGraphicsEndImageContext();
   }
   else if (imageToRotate.imageOrientation == 1)
   {
       properlyRotatedImage = [UIImage imageWithCGImage:imageRef scale:1.0 orientation:1];
   }

   return properlyRotatedImage;
}

不良行为现在已改为13.4。图像现在以准确的方向拍摄。

将此图像保存到库中,然后查看图像是否旋转?@inderkumarratore:我从库中存储的设备摄像头中拍摄图像,然后在应用程序中拍摄该图像,然后图像也旋转。经过大量研究后,我发现了相同的问题。我找到了解决方案,请检查我的答案,基本上就是这样有点旋转。我的应用程序也有同样的问题,我试过你的,但没有效果。图像仍在旋转。问题可能是什么?问题是什么?运行从AVCaptureSession内的AVCaptureVideoDataOutput获取的图像后,请详细解释,该图像作为CGImageRef直接转换为UIImage,它似乎没有任何作用。我将orient变量更改为[[UIDevice currentDevice]orientation](确保它在主线程中运行),但整个过程仍旋转了90度。建议如何调整方向?@我不明白你的意思。你能寄给我这个的演示吗?所以我可以解决你的问题