从 UIImagePickerController 获取图像后,UIImageView 旋转 iPhone 5 的图像

2023-12-08

我正在使用 UIImagePickerController 使用相机捕获图像。我的应用程序支持的方向是纵向。我发现 iPhone 5 出现奇怪的行为。我使用的是 Xcode 7 和 swift 2.0。 iPhone 5操作系统版本是8.4。我的应用程序的部署目标是 8.0。

问题是。 1. 对于iPhone 5,拍摄图像后,图像以拍摄图像的相应模式显示。但是当我按下“使用照片”标准选项并且当图像显示在 UIImageView 上时,图像会自动向左旋转。不知道为什么。如果我从照片库中选择图像,图像不会旋转。我不想旋转图像。 我看到类似的帖子有更好的解释和实际图像,但没有得到答复。UIImageView 使用 Retina 4 iPhone 模拟器旋转图像,但不使用 Retina 3.5/常规模拟器我尝试了这篇文章中几乎所有快速解决方案:iOS UIImagePickerController 上传后结果图像方向还有其他帖子,但似乎没有任何效果。我使用了 shouldAutorotate()、sFunc_imageFixOrientation(),并添加了这篇文章中的扩展。

  1. 此外,对于这两种设备,按下“使用照片”选项后,上传图像大约需要 10 秒。能不能做得更快一些。

这是我的代码:

函数 openCamera() {

    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) {
        dispatch_async(dispatch_get_main_queue(), {
            let imagePicker = UIImagePickerController();
            imagePicker.sourceType = UIImagePickerControllerSourceType.Camera;
            imagePicker.allowsEditing = false;
            imagePicker.delegate = self;
            imagePicker.modalPresentationStyle = .FormSheet
            self.presentViewController(imagePicker, animated: true, completion: nil);
        });

    }
}

func openGallary() {
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary;
        imagePicker.allowsEditing = true
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
    profileImage?.image =   image
    self.dismissViewControllerAnimated(true, completion: nil);
}

这是我观察到的。当您使用相机捕获图像时,图像逆时针旋转 90 度,图像方向设置为 UIImageOrientation.Up,因此函数 sFunc_imageFixOrientation 中的代码iOS UIImagePickerController 上传后结果图像方向不管用。如果您从照片库中选择图像,则图像将按原样显示。

修改后的功能:

    func sFunc_imageFixOrientation(img:UIImage) -> UIImage {

        // 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.
        var transform:CGAffineTransform = CGAffineTransformIdentity
        // Rotate image clockwise by 90 degree
        if (img.imageOrientation == UIImageOrientation.Up) {
            transform = CGAffineTransformTranslate(transform, 0, img.size.height);
            transform = CGAffineTransformRotate(transform,  CGFloat(-M_PI_2));
        }

        if (img.imageOrientation == UIImageOrientation.Down
            || img.imageOrientation == UIImageOrientation.DownMirrored) {

            transform = CGAffineTransformTranslate(transform, img.size.width, img.size.height)
            transform = CGAffineTransformRotate(transform, CGFloat(M_PI))
        }

        if (img.imageOrientation == UIImageOrientation.Left
            || img.imageOrientation == UIImageOrientation.LeftMirrored) {

            transform = CGAffineTransformTranslate(transform, img.size.width, 0)
            transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2))
        }

        if (img.imageOrientation == UIImageOrientation.Right
            || img.imageOrientation == UIImageOrientation.RightMirrored) {

            transform = CGAffineTransformTranslate(transform, 0, img.size.height);
            transform = CGAffineTransformRotate(transform,  CGFloat(-M_PI_2));
        }

        if (img.imageOrientation == UIImageOrientation.UpMirrored
            || img.imageOrientation == UIImageOrientation.DownMirrored) {

            transform = CGAffineTransformTranslate(transform, img.size.width, 0)
            transform = CGAffineTransformScale(transform, -1, 1)
        }

        if (img.imageOrientation == UIImageOrientation.LeftMirrored
            || img.imageOrientation == UIImageOrientation.RightMirrored) {

            transform = CGAffineTransformTranslate(transform, img.size.height, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
        }


        // Now we draw the underlying CGImage into a new context, applying the transform
        // calculated above.
        let ctx:CGContextRef = CGBitmapContextCreate(nil, Int(img.size.width), Int(img.size.height),
                                                     CGImageGetBitsPerComponent(img.CGImage), 0,
                                                     CGImageGetColorSpace(img.CGImage),
                                                     CGImageGetBitmapInfo(img.CGImage).rawValue)!;
        CGContextConcatCTM(ctx, transform)


        if (img.imageOrientation == UIImageOrientation.Left
            || img.imageOrientation == UIImageOrientation.LeftMirrored
            || img.imageOrientation == UIImageOrientation.Right
            || img.imageOrientation == UIImageOrientation.RightMirrored
            || img.imageOrientation == UIImageOrientation.Up
            ) {

            CGContextDrawImage(ctx, CGRectMake(0,0,img.size.height,img.size.width), img.CGImage)
        } else {
            CGContextDrawImage(ctx, CGRectMake(0,0,img.size.width,img.size.height), img.CGImage)
        }


        // And now we just create a new UIImage from the drawing context
        let cgimg:CGImageRef = CGBitmapContextCreateImage(ctx)!
        let imgEnd:UIImage = UIImage(CGImage: cgimg)

        return imgEnd
    }
}

仅当从相机捕获图像时才调用此函数。我知道我的答案并不完美,但如果没有任何效果,你绝对可以尝试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 UIImagePickerController 获取图像后,UIImageView 旋转 iPhone 5 的图像 的相关文章

  • 重置 ARKit 坐标

    我有一个简单的问题 如果我想开始游戏并将棋盘放在我面前 gameBoard position SCNVector3 0 0 0 6 这一直有效 直到我离开游戏并再次回来为止 我可以在镜头前将游戏板展示在完全相同的位置吗 0 6m在我前面 我
  • Swift:在标签背景中制作图像

    我想将标签放入带有角半径的红色矩形的图像中 条件是图像大小必须等于或略大于标签大小 为此我找到了一个类似的question https stackoverflow com questions 3037902 adding backgroun
  • AVAssetExportSession.requestExportSession 回调从未被调用(swift 3,iOS10)

    以下代码从不调用导出回调 导出会话创建得很好 我没有看到任何错误 也没有任何进展 CPU 为 0 我认为没有例外 状态为 1 进行中 进度为 0 错误为零 视频在画廊中播放 我可以成功获取视频的图像 我已将代码提取到单个 UIViewCon
  • 如何从 UITableViewController 中的静态单元格获取文本字段?迅速

    我的视图层次结构如下所示 UIViewController 类型的 ElevethViewController容器视图嵌入容器视图中的 UITableViewController 类型的 ManagedTableEleventhViewCo
  • 扩展功能截图未捕获 iPhone 和 iPad 中的同一区域

    我正在使用扩展函数来截取 uiview 的屏幕截图 问题是结果看起来非常不同 我希望无论使用 ipad 还是 iphone 照片看起来都一样 我手动输入约束 因此我希望图像是相同的 我想使用该函数转到视图控制器的原点或中心 高度为 200
  • 使用 NSXMLParser 在 Swift 中解析分层 XML

    我确实在以我实际可以使用的形式获取分层 XML 值时遇到问题 因此我们将不胜感激 我对 Swift 和 IOS 开发还很陌生 所以说实话我并不完全理解解析器 但我希望在这之后我能理解 下面是我尝试解析的示例 XML 它来自肥皂网络服务 连接
  • 还有比这更好的方法在通知附件中使用 Assets.xcassets 中的图像吗?

    我想将 Assets xcassets 中的图像附加到通知中 我已经寻找解决方案大约一个小时了 这似乎是执行此操作的唯一方法 func createLocalUrl forImageNamed name String gt URL let
  • 在 swift 中使用协议作为数组类型和函数参数

    我想创建一个可以存储符合某种协议的对象的类 对象应该存储在类型数组中 根据 Swift 文档 协议可以用作类型 因为它是一种类型 所以您可以在许多允许其他类型的地方使用协议 包括 作为函数 方法或初始值设定项中的参数类型或返回类型 作为常量
  • 如何在 UIAlertController 中的 UITextField 之后插入 UILabel

    我有一个UIAlertController of alert消息文本的样式 我已经插入了一个UITextFiled在其中与addTextField 现在我想要在它下面有一串文本 我想我需要一个UILabel但我该如何插入它呢 A UIAle
  • 在 Swift 中使用模板键入别名声明

    如何避免函数中多余的限制声明f0 f1 f10 class SomeClass
  • 在单个 MTLRenderCommandEncoder 中使用多个渲染管道:如何同步 MTLBuffer?

    中心议题我在一个渲染命令编码器中有两个渲染管道 第一个管道写入第二个管道中使用的缓冲区 这似乎不起作用 我预计这是一个同步问题 当我为每个渲染管道使用一个单独的渲染命令编码器时 我得到了所需的结果 可以使用一个渲染命令编码器来解决这个问题
  • 如何以编程方式设置 UICollectionViewCell 宽度和高度

    我正在尝试实施一个CollectionView 当我使用自动布局时 我的单元格不会改变大小 但会改变它们的对齐方式 现在我宁愿将它们的尺寸更改为例如 var size CGSize width self view frame width 1
  • 是否可以快速读取权利文件

    我正在我的应用程序中实现通用深度链接 当我注册不同的域时 它会创建一个 AppName entitlements 文件 我想像 plist 一样读取这个文件的值 I tried if let path NSBundle mainBundle
  • Swift 3 Web 视图

    所以我刚刚更新到新的Xcode8 and Swift3但现在我的网络视图不起作用 这是我使用的代码 UIWebView loadRequest webView NSURLRequest URL NSURL string http hardw
  • 如何查看iOS11屏幕录制是否开启?

    为了检测 iOS11 屏幕录制功能的开或关 我使用了 isCaptured 和 UIScreenCapturedDidChange 通知 当我第一次启动应用程序并在 iOS11 内置屏幕录制功能上时 它会通知选择器方法 值为 True 但是
  • 如何在一个视图控制器中使用两个自定义 UITableViewCell 创建两个表视图?

    我正在尝试创建两个UITableViews在一个视图控制器中使用两个自定义UITableViewCells 我有以下内容 func tableView tableView UITableView cellForRowAtIndexPath
  • 将 swift 结构体转换为 json 字符串

    我正在尝试将我的 swift 结构转换为 json 格式 类似这样的问题似乎有不少 但到目前为止 没有一个解决方案对我有用 这是我的结构 struct Rec Codable var name String var time Int var
  • 转换任何对象?到字符串

    我有一个返回 AnyObject 的函数 func aFunction param String gt AnyObject 如何将其转换为字符串 和字符串 尝试这个 if let result aFunction test as Strin
  • Swift 1.2 和 Swift 2.0 中的字符串长度[重复]

    这个问题在这里已经有答案了 在以前版本的 Swift 中 我有以下代码 func myfunc mystr String if mystr utf16Count gt 3 使用最新版本的 Swift 1 2 我现在收到以下错误 utf16C
  • Swift - 带循环的多个链 http 请求

    两天以来 我感觉我正在搜索整个网络来解决多个 http 请求的问题 所以我的工作流程如下所示 将图像上传到服务器 响应 XML 格式和任务 ID 使用任务 ID 向服务器发出 GET 请求 以检查该任务的状态 响应 XML 格式 其中状态可

随机推荐

  • 带接口的 JsonConverter

    我有一个来自客户端的对象 并自动从 Web Api 2 反序列化 现在我的模型的一个属性有问题 该属性 CurrentField 是 IField 类型 并且该接口有 2 种不同的实现 这是我的模型 只是一个假人 public class
  • Google Maps API,InfoWindow domready 事件处理程序出错

    我正在信息信息窗口中设置一个表单 用于众包位置数据 我已经一切就绪并正在运行 但我试图在信息窗口弹出时将纬度和经度值复制到表单元素中 我在地图 div 上成功使用了其他事件侦听器 但是当我使用domready信息窗口的事件处理程序我收到错误
  • 是否可以使用 Java 格式化记忆棒、笔式驱动器或磁盘? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想创建一个多平台实用程序来格式化 擦除记忆棒 磁盘等 在Java中可以做到这一点吗 或者我是否需要为每个操作系统平台调用本机方法 这是非常特定于系统的 没有通用的方法来执行此操
  • 多个 if 语句的替代方案

    我的代码包含很多if声明 有没有其他方法可以摆脱这些陈述 例如假设我有以下条件 if t1 gt 1 t2 0 t3 0 div b class fadeIn if t1 0 t2 gt 1 t3 0 div c class fadeIn
  • 当选择选项时,Jquery 提交选择表单

    我有一个选择 有一个很长的列表 我可以在其中搜索它 使用 select2 jquery pluing 我的选择 using Html BeginForm ProjectList Client FormMethod Get new id cl
  • 在 JavaScript 中使异步事件同步

    我正在使用 WPF 3 5SP1 WebBrowser 控件来显示包含一些 javascript 函数的页面 然后我的程序需要调用一个 javascript 函数来进行异步调用 我需要一种方法将异步回调的结果返回到 C 以便我可以处理结果
  • 带有外键的 Django ModelForm

    我正在尝试创建一个ModelForm使用外键更新表 我所拥有的似乎有效 但我希望有人能告诉我是否有更好的方法来做到这一点 或者我在下面做的方式是否有问题 使用查询集是否正确Author and Genres桌子 感觉我应该在Book模型 并
  • R:当存在平局时,找到每行中具有最小值的列

    这是我的数据示例 gt dat lt matrix c 59 50 48 44 44 NA 78 59 42 67 51 NA 72 64 64 byrow TRUE ncol 3 gt k lt apply dat 1 function
  • 如何让 bash 脚本循环直到特定时间

    通常要运行无限 bash 循环 我会执行如下操作 while true do echo test sleep 1 done 相反 如果我想做一个只要早于 20 00 就无限循环的循环 该怎么办 有没有办法在 bash 中做到这一点 您可以使
  • 在 Android Gradle 构建之前执行任务?

    Gradle 是否可以在调用之前执行任务 gradle build 就像是precompile 请有人帮忙 这样的事情可能吗 如何实现 你可以这样做 task build lt lt println build task preBuild
  • SBT 0.13 中的任务定义不接受打印?

    我正在使用SBT0 13 1 项目 build properties如下 sbt version 0 13 1 执行中sbt about打印出以下内容 sbt info Loading global plugins from Users j
  • 访问子文件夹中的 m 文件,而不将其永久添加到路径中

    我已经下载了一个工具箱 其中有许多子文件夹中的许多文件 空间计量经济学工具箱 用于一个特定项目 我不想将其添加到路径中 因为我认为我不会养成使用它的习惯 而且我不知道它是否会隐藏函数统计工具箱 如何访问此工具箱中的功能 有没有办法以编程方式
  • 如何使用hibernate将图像存储到postgres数据库中

    我想使用 hibernate 和 Java 将图像存储到数据库中 我正在使用 postgres 数据库 I tried bytea存储图像的数据类型和byte hibernate pojo 中的数据类型 我使用了以下代码 CREATE TA
  • 寻找局部最大值和最小值

    我正在寻找一种计算有效的方法来查找 R 中大量数字的局部最大值 最小值 希望没有for循环 例如 如果我有一个像这样的数据文件1 2 3 2 1 1 2 1 我希望函数返回 3 和 7 它们是局部最大值的位置 diff diff x or
  • 在 VB.Net 中使用 LINQ 将集合拆分为 n 个部分

    Question 在 VB Net 中 如果我有一个像这样的集合 Dim collection As IEnumerable Of Integer Enumerable Range 0 99 我如何将它分成不确定数量的元素的组 可枚举的 状
  • Python Boto EC2 查找给定 IP 地址的实例

    在Python中使用boto 如何在给定IP地址的情况下找到boto ec2实例对象 boto3 ec2 boto3 client ec2 filters Name ip address Values 1 1 1 1 result list
  • 如何从SQL Server表中下载并查看图像?

    我有个问题 我想从 SQL Server 表下载并在浏览器中查看图像 我不知道该怎么办 My code public partial class IndexForm System Web UI Page protected void Pag
  • 如何从一个视图控制器访问另一个视图控制器的变量值?

    我有一个整数变量 time 在一个视图控制器中 我需要在另一个视图控制器中使用其值 这是代码 MediaMeterViewController TRP On Touch Down event start the timer IBAction
  • spring boot mvc:遵循示例后失败

    我正在关注链接https github com spring guides gs serving web content 签出文件后 将 gs serving web content complete 导入 IDEA 并运行 它运行成功 但
  • 从 UIImagePickerController 获取图像后,UIImageView 旋转 iPhone 5 的图像

    我正在使用 UIImagePickerController 使用相机捕获图像 我的应用程序支持的方向是纵向 我发现 iPhone 5 出现奇怪的行为 我使用的是 Xcode 7 和 swift 2 0 iPhone 5操作系统版本是8 4