`
修博龙泉
  • 浏览: 318322 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ios 拍照旋转90度

 
阅读更多

- (UIImage*)rotateImage:(UIImage *)image
{
    int kMaxResolution = 960; // 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();
     
    return imageCopy;
}

分享到:
评论

相关推荐

    解决ios拍照上传图片被旋转

    总结来说,解决iOS拍照上传图片被旋转的问题,关键在于理解和处理图片的Exif元数据,尤其是Orientation字段。在Java后端处理图片时,我们可以通过读取元数据,判断图片的旋转方向,然后进行适当的旋转操作,确保图片...

    h5上传图片压缩并且转为base64并且上传阿里云(对ios相机拍照旋转90度处理)

    上传图片压缩并且转为base64并且上传阿里云(对ios相机拍照旋转90度处理)

    利用exif.js解决IOS手机H5页面拍照上传照片旋转90度问题

    利用exif.js解决IOS手机H5页面拍照上传照片旋转90度问题: upLoadPic($inputBorn, $inpOutBorn, 1); 其中$inputBorn为type="file"的input, $inpOutBorn为展示图片用的盒子,盒子要给宽高,默认的情况下,图片是以背景...

    解决ios拍照图片旋转的exif.js文件

    exif.js是一个JavaScript库,用于从图像文件读取EXIF元数据。解决ios拍照出现旋转的问题

    iOS拍照后图片自动旋转90度的完美解决方法

    在iOS开发中,当用户通过系统相机拍摄照片后,有时会出现照片自动旋转90度的问题。这主要与图片的`imageOrientation`属性有关,该属性描述了图片在内存中的方向,与实际显示的方向可能不一致。尤其是在图片进行裁剪...

    ios拍照后按范围裁剪图片demo

    在iOS开发中,实现“ios拍照后按范围裁剪图片demo”涉及到多个关键知识点,主要集中在用户界面(UI)设计、图像处理以及照片权限管理。下面将详细解释这些技术要点。 首先,我们要创建一个自定义的拍照页面。这通常...

    JS解决IOS中拍照图片预览旋转90度BUG的问题

    上篇文章【Js利用Canvas实现图片压缩功能】中做了图片压缩上传,但是在IOS真机测试的时候,发现图片预览的时候自动逆时针旋转了90度。对于这个bug,我完全不知道问题出在哪里,接下来就是面向百度编程了。通过度娘...

    H5拍照解决苹果拍照旋转 exif.js

    H5拍照解决苹果拍照旋转H5拍照解决苹果拍照旋转H5拍照解决苹果拍照旋转

    swift-一个IOS拍照方向修复工具

    例如,如果照片需要顺时针旋转90度,可以这样操作: ```swift let transform = CGAffineTransform(rotationAngle: .pi / 2) let rotatedCGImage = cgImage?.transformed(by: transform) let rotatedUIImage = ...

    拍照并上传照片和说明的 iOS 客户端

    在开发“拍照并上传照片和说明的 iOS 客户端”时,我们需要关注以下几个关键知识点: 1. **iOS 应用程序开发环境**:首先,我们需要使用 Xcode,这是Apple官方提供的集成开发环境(IDE),用于编写Objective-C或...

    java 图片压缩 iphone拍照上传旋转问题处理压缩工具类

    这是因为iOS设备在拍摄照片时可能会记录照片的元数据(Exif信息),其中包括照片的旋转角度,这在上传到服务器或在不同设备上显示时可能导致显示异常。本篇文章将详细介绍如何利用Java来处理这个问题,特别是如何...

    ios拍照上传图片倒立js

    3. **处理旋转信息**:根据获取到的`Orientation`值,我们可以确定图片需要逆时针或顺时针旋转多少度。exif.js提供了一个`rotateImage()`方法,可以根据orientation值来旋转图片。 ```javascript function rotate...

    ios-简单的图片裁剪功能,支持旋转 以及各种手势.zip

    例如,如果用户执行90度顺时针旋转,我们可以设置`transform = CGAffineTransform(rotationAngle: .pi / 2)`。 手势识别是该项目的另一个关键特性。iOS的`UIPanGestureRecognizer`、`UIPinchGestureRecognizer`、`...

    iOS图片合成(拍照换发)

    在iOS开发中,图片合成(拍照换发)是一项常见的功能,尤其在美颜、娱乐类应用中非常流行。本文将详细讲解如何实现这样一个小程序,包括拍照、图像处理以及发型合成等核心步骤。 首先,我们需要使用iOS提供的...

    ios应用源码之一个自定义的照相demo 2018127

    在iOS开发中,创建自定义相机功能是一项常见的需求,它能提供给用户更个性化的拍照体验。本示例代码“ios应用源码之一个自定义的照相demo 2018127”旨在帮助开发者理解如何在iOS应用中构建这样的功能。下面将详细...

    纠正IOS,adroid 上传图片,图片旋转问题

    当用户在iOS或Android设备上拍照并旋转设备时,系统会记录下这一旋转动作,并在保存图片时将该信息写入到Exif元数据中。 在上传图片时,服务器端或者客户端应用程序通常需要读取并处理这些元数据,以确保图片按照...

    ios开发拍照摄像并保存到相册

    在iOS开发中,集成拍照和摄像功能是常见的需求,用户可以通过这些功能拍摄照片或录制视频,然后将其保存到设备的相册中。本教程将详细讲解如何实现这一过程,主要涉及的知识点包括: 1. **AVFoundation框架**:在...

    iOS音视频相机组件

    在iOS开发中,音视频相机组件是至关重要的部分,它为开发者提供了构建高效、功能丰富的媒体应用的基础。本文将深入探讨“iOS音视频相机组件”的核心知识点,包括AVFoundation框架的使用、视频流捕获、视频编码、相片...

Global site tag (gtag.js) - Google Analytics