iOS:保存为 PNG 表示数据后图像旋转 90 度

2023-11-26

我已经进行了足够的研究来使其正常工作,但无法修复它。从相机拍照后,只要我将图像存储为 UIImage,就可以了,但是一旦我将此图像存储为 PNG 表示形式,它就会旋转 90 度。

以下是我的代码和我尝试过的所有操作:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{
    NSString *mediaType = [info valueForKey:UIImagePickerControllerMediaType];

    if([mediaType isEqualToString:(NSString*)kUTTypeImage]) 
    {
        AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
        delegate.originalPhoto  = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
        NSLog(@"Saving photo");
        [self saveImage];
        NSLog(@"Fixing orientation");
        delegate.fixOrientationPhoto  = [self fixOrientation:[UIImage imageWithContentsOfFile:[delegate filePath:imageName]]];      
        NSLog(@"Scaling photo");
        delegate.scaledAndRotatedPhoto  =  [self scaleAndRotateImage:[UIImage imageWithContentsOfFile:[delegate filePath:imageName]]];
    }
    [picker dismissModalViewControllerAnimated:YES];
    [picker release];
}


- (void)saveImage
{
    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    NSData *imageData = UIImagePNGRepresentation(delegate.originalPhoto);
    [imageData writeToFile:[delegate filePath:imageName] atomically:YES];
}

这里的fixOrientation和scaleAndRotateImage函数取自here and here分别。当我将它们应用到 UIImage 上时,它们工作正常并旋转图像,但如果我将图像保存为 PNG 表示形式并应用它们,它们就不起作用。

执行以上功能后,请参考下图:

The first photo is original, second is saved, and third and fourth after applying fixorientation and scaleandrotate functions on saved image


从 iOS 4.0 开始,相机拍照时不会在保存前旋转照片,

只需在 JPEG 的 EXIF 数据中设置一个旋转标志。如果将 UIImage 保存为 JPEG,它

将设置旋转标志。PNG 不支持旋转标志,因此如果将 UIImage 保存为

PNG,它将被错误地旋转,并且没有设置标志来修复它。所以如果你想要PNG

您必须自己旋转图像,为此请检查此link.

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

iOS:保存为 PNG 表示数据后图像旋转 90 度 的相关文章

随机推荐

  • 何时使用虚拟析构函数?

    我对大多数都有深入的了解OOP理论 但让我很困惑的一件事是虚拟析构函数 我认为无论如何 对于链中的每个对象 析构函数总是被调用 您打算什么时候将它们虚拟化 为什么 当您可能通过指向基类的指针删除派生类的实例时 虚拟析构函数非常有用 clas
  • ggvis 中带有数字的热图

    我正在尝试使用 ggvis 中 ggplot2 中的数字复制热图 ggplot2版本是 library ggplot2 hec lt as data frame xtabs Freq Hair Eye HairEyeColor ggplot
  • 将第三方js文件导入到Angular TypeScript项目中

    在我使用 Angular 的经历中 我被迫使用四种不同的方式来包含第 3 方库poliglot js 对于多语言 所以能够使用new Polyglot 在我的朗课上 export class Lang constructor this po
  • iPhone/iPad 上的 PDF 超链接

    我一直在浏览谷歌和SO 但还没有找到我的问题的答案 或者至少没有找到更新的答案 我有一个包含超链接 热点的 PDF 并且想在我自己的 iPhone iPad 应用程序中显示该 PDF 文件 当用户单击超链接 热点时 我希望将用户带到链接的适
  • JPA ManyToMany,JoinTable怎么会有属性?

    我有一个关于EJB中ManyToMany设计的问题 jointable如何拥有属性 举个例子 学生和课程都是ManyToMany 每个学生有很多门课程 很多学生选择一门课程 Entity public class Student imple
  • 聚焦时更改 mat-select-arrow 和 mat-select-underline

    到目前为止 我已经尝试了很多不同的事情 例如 deep mat select focus mat select trigger mat select arrow color 63961C deep mat select focus mat
  • 平滑这个 jQuery 切换动画吗?

    所制作的动画我的 jQuery 函数不稳定 我一直在寻找不同的 SO 解决方案 例如添加 jquery easing 但没有运气 问题是每个 div 中的 iframe 吗 关于如何平滑动画有什么想法吗 我的基本切换功能是最好的方法吗 JS
  • Codeigniter 4 - 如何显示404页面?

    这是一个非常愚蠢的问题 但我无法处理它 在 Codeigniter 3 中 我只是在任何控制器中使用 show 404 函数来显示 404 页面 我怎样才能用 Codeigniter 4 做同样的事情 我刚才正在寻找同样的东西 我在这里找到
  • Angular 2. 如何在 Observable 中使用重定向处理 4xx 错误?

    我有一个调用 api 的服务 getItems itemId number Observable
  • 在实体框架 6 中调用标量值函数

    如何在实体框架 6 中调用标量函数 我尝试过以下代码 using MhEntities DContext new MhEntities var Account IdParameter Account Id HasValue new Obje
  • PHP 取消链接不起作用

    我正在尝试使用 unlink 删除 php 中的照片 我之前在其他服务器上使用过它 但这次它不起作用 我已经使用绝对路径进行测试 但仍然不起作用 我把它用作 取消链接 img1 jpg and unlink http www mysite
  • Django ORM 在注释多个聚合列时删除不需要的 Group by

    我想在 django ORM 中创建一个类似这样的查询 SELECT COUNT CASE WHEN myCondition THEN 1 ELSE NULL end as numyear FROM myTable 以下是我编写的 djan
  • Rails 设计,没有路线匹配注销

    尽管有很多类似的问题 但我已经搜索了几个小时但仍然无法解决它 环境 导轨3 0 9 红宝石 1 9 2 设计1 4 2 我使用以下方法更改了默认登录网址 5 resources users 6 devise for users path g
  • 如何在VS2015中构建OpenSSL:x86cpuid.asm是一个空文件

    我需要为使用 VS2015 32 位 的项目构建 OpenSSL 我找到的说明是http developer covenanteyes com building openssl for visual studio 据报道 更新 编辑版本使用
  • 如何在 SwiftUI 中将苹果 ColorPicker 的布局从圆形更改为方形?

    ColorPicker默认的按钮样式是圆形 如下所示 我想将圆形按钮的样式更改为矩形 但似乎没有 API 可以改变它的风格 所以我在它上面放了一个矩形 并将它的 allowedHitTesting 设置为 false 以将单击事件传输到 C
  • 如何实现 DaggerService

    我已经了解了基础知识以及课程 但是对于 dagger 甚至 dagger 2 来说是新手 我不知道应该如何使用它 这是 dagger 意图服务 https google github io dagger api latest dagger
  • 如何将表或行传递给 Postgresql 中的函数?

    这是代码 当前参数类型是数组 但我想传递一个表或行 create or replace function skyband sortedlist rest point returns setof point as declare last x
  • 如何在 C# 中高效处理大量更新对象?

    我正在使用 C 和 XNA 开发 2D 头顶射击游戏 我有一个类 我将其称为 bullet 并且需要每隔几分之一秒更新其中许多实例 我的第一个方法是拥有一个通用的项目符号列表 然后根据需要简单地删除和添加新的项目符号 但在这样做的过程中 G
  • 如何在不使用 setGridLinesVisible() 方法的情况下永久显示 GridPane 对象网格线?

    是否可以使所有GridPane的网格线永久可见而不使用setGridLinesVisible 我知道setGridLinesVisible 仅用于调试目的 我想显示网格线以方便最终用户 另外 我需要在窗格容器而不是画布上工作 我的程序能够在
  • iOS:保存为 PNG 表示数据后图像旋转 90 度

    我已经进行了足够的研究来使其正常工作 但无法修复它 从相机拍照后 只要我将图像存储为 UIImage 就可以了 但是一旦我将此图像存储为 PNG 表示形式 它就会旋转 90 度 以下是我的代码和我尝试过的所有操作 void imagePic