美文网首页
拍照方向问题

拍照方向问题

作者: LvyCode | 来源:发表于2017-08-11 09:32 被阅读44次

UIImagePickerController返回的照片带有方向信息,如果直接上传到服务器的话,可能造成旋转了90°(当手机竖直拍照)的情况。而且如果直接取其jpeg数据,或者将UIImage保存到本地的话,就会丢失这个方向信息,导致下一次读取出来图片就是颠倒的。

- (UIImage*)fixOrientation:(UIImage*)aImage
{
    
    // No-op if the orientation is already correct
    if (aImage.imageOrientation == UIImageOrientationUp)
        return aImage;
    
    // We need to calculate the proper transformation to make the image upright.
    // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
    CGAffineTransform transform = CGAffineTransformIdentity;
    
    switch (aImage.imageOrientation) {
        case UIImageOrientationDown:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
            transform = CGAffineTransformRotate(transform, M_PI);
            break;
            
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
            transform = CGAffineTransformRotate(transform, M_PI_2);
            break;
            
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);
            transform = CGAffineTransformRotate(transform, -M_PI_2);
            break;
        default:
            break;
    }
    
    switch (aImage.imageOrientation) {
        case UIImageOrientationUpMirrored:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;
            
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;
        default:
            break;
    }
    
    // Now we draw the underlying CGImage into a new context, applying the transform
    // calculated above.
    CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
                                             CGImageGetBitsPerComponent(aImage.CGImage), 0,
                                             CGImageGetColorSpace(aImage.CGImage),
                                             CGImageGetBitmapInfo(aImage.CGImage));
    CGContextConcatCTM(ctx, transform);
    switch (aImage.imageOrientation) {
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            CGContextDrawImage(ctx, CGRectMake(0, 0, aImage.size.height, aImage.size.width), aImage.CGImage);
            break;
            
        default:
            CGContextDrawImage(ctx, CGRectMake(0, 0, aImage.size.width, aImage.size.height), aImage.CGImage);
            break;
    }
    
    // And now we just create a new UIImage from the drawing context
    CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
    UIImage* img = [UIImage imageWithCGImage:cgimg];
    CGContextRelease(ctx);
    CGImageRelease(cgimg);
    return img;
}

相关文章

  • 拍照方向问题

    UIImagePickerController返回的照片带有方向信息,如果直接上传到服务器的话,可能造成旋转了90...

  • Android 拍照后方向旋转问题

    假定为 横屏应用 ,这时无需设定Camera预览时的 display orientation,当手持为横屏时(ho...

  • Camera 拍照方向与预览的问题

    Camera 拍照方向与预览的问题 手机设备的自然方向 预览帧方向 当手机屏幕 竖立时的自然方向,此时,坐标原点位...

  • Camera YUV 图片格式转换和画面旋转的问题

    Camera YUV 图片格式转换和画面旋转的问题 YUV 格式 Camera 拍照方向与预览的问题 前面介绍 Y...

  • android-camera2相机开发【6】-拍照&屏幕

    前面几篇文章实现了相机的预览,对预览中出现的问题及需要注意的事项进行了梳理。 本篇文章对相机的拍照流程、拍照方向及...

  • iOS UIImage各属性 & 图片颠倒

    UIImage 的方向问题:拍照,或者从相册中选择照片,进行剪切,然后分享.结果出现了,剪切后图片颠倒或者旋转90...

  • A2. Gsensor调试

    问题: 机器G-Sensor方向不对,Y轴与现实相反,导致相机拍照存下的照片上下颠倒。 解决: G-sensor传...

  • 解决ios手机竖拍上传图片旋转90°。使用lrz.js

    最近在做微信公众的项目,发现在苹果手机上竖着拍照,上传图片后图片方向会旋转90°,横着拍照方向正常。最后使用lrz...

  • 拍照旋转问题

    当我需要把拍来的图片转换为bitmap然后编辑时,如果是竖屏拍照,就会出现预览时图片错位问题。目前只能这样才能解决...

  • 问题方向

    提供一些提问方向: 从竞品方面做细分(优势、劣势、问题), 从学习借鉴方面做细分, 从消费者方面(购买力、消费心理...

网友评论

      本文标题:拍照方向问题

      本文链接:https://www.haomeiwen.com/subject/lqhlrxtx.html