使用UIImagePickerController获取图片——如何知道保存的是PNG还是JPEG?

2023-11-24

我有一个UIImagePickerController让用户从图像库中选择图像,并通过didFinishPickingMediaWithInfo method.

我需要能够将生成的图像保存到磁盘(在应用程序的文档文件夹中),并稍后重新加载。

问题是我无法判断是将其存储为 PNG 还是 JPEG。我不能总是将其存储为 PNG,因为对于较大的照片来说,它的速度非常慢(更不用说我必须单独存储图像方向)。我不能总是将其存储为 JPEG,因为在某些情况下图像具有透明度,如果我这样做,透明度就会丢失。

我已经检查过UIImagePickerControllerMediaType在图像选择器返回的信息字典中键入,无论我选择的是PNG还是JPEG,返回的是"image.public".

So...

有没有办法知道用户是否选择了PNG?也许有某种方法可以检查图像是否具有透明度或其他什么?

Thanks.


好吧,所以我想通了。这可能不适用于所有场景,但对我来说已经足够了:

    CGImageAlphaInfo imgAlpha = CGImageGetAlphaInfo(theImage.CGImage);

    // Is this an image with transparency (i.e. do we need to save as PNG?)
    if ((imgAlpha == kCGImageAlphaNone) || (imgAlpha == kCGImageAlphaNoneSkipFirst) || (imgAlpha == kCGImageAlphaNoneSkipLast)) {
         // save as a JPEG
    } else {
         // save as a PNG
    }

...当然,您需要记住保存的图像类型,为其指定适当的文件扩展名,然后重新加载正确的图像...但基本上这就解决了。具有透明度的图像将保存为 PNG,其他所有图像将保存为 JPEG。

如果有人有更好的方法,我很想听听。谢谢!

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

使用UIImagePickerController获取图片——如何知道保存的是PNG还是JPEG? 的相关文章

随机推荐

  • 透明背景与 Three.js

    代码有效 但我在使用 Three js 设置画布透明背景时遇到问题 我用 Background renderer setClearColor 0xffffff 0 但随后背景变黑 如何将其更改为透明 代码 var camera scene
  • 如何使用 argparse 创建“对列表”类型的参数?

    我需要让 python 脚本的最终用户输入如下内容 script py sizes lt 2 2 gt lt 3 3 gt lt 6 6 gt 其中的每个元素 sizes选项是一对两个正整数 我怎样才能做到这一点argparse 定义自定义
  • 如何配置 Squirrel SQL 客户端以与 MS Access 一起使用

    我正在努力让 Squirrel SQL 连接到 MS Access 数据库 只是一个普通的数据库 没有密码 我创建一个别名并使用驱动程序 JBDC ODBC 桥 此驱动程序前面有一个勾 我不知道在网址中输入什么 我使用 数据库文件路径 gt
  • 使 GWT 应用程序可由搜索引擎抓取

    我想使用 使我的 GWT 应用程序可爬网的令牌 如下所述 http code google com web ajaxcrawling 在线有一个使用此功能的 GWT 示例应用程序 例如 http gwt google com samples
  • 连接 std::variant 和 std::variant 的类型

    有没有办法从两个现有变体类型声明第三个变体 其中包含两个变体类型的并集 include
  • UIDocument 和 NSFileWrapper 架构和性能

    我们最近将代码转换为使用 UIDocument 而不是直接操作文件系统上的文件 因此我们遇到了一些性能问题 我们想知道我们是否错误地使用了这个类 是否有其他人遇到这些问题 以及解决这些问题的常见方法是什么 Our app 我们有一个 鞋盒应
  • LINQ实际上编译成什么?

    背景 其背景是我最近在评论中与另一位显然知识渊博的用户就 LINQ 的编译方式进行了对话 我先 总结 一下 说LINQ被编译成for循环 虽然这是不正确的 但我对其他堆栈的理解 例如this one是 LINQ 查询被编译为内部有循环的 l
  • Backbone js,更新模型更改视图

    为什么我的视图没有更新
  • 为什么当类被密封时,带有 AutoMoqCustomization 的 Autofixture 不再抱怨缺少无参数构造函数?

    当我使用Moq直接模拟IBuilderFactory并实例化BuilderService我自己在单元测试中 我可以获得通过测试 验证Create 的方法IBuilderFactory被调用一次 但是 当我使用自动夹具 with AutoMo
  • 如何在文本上使用 TinyMCE 函数而不实际选择该文本?

    我有各种 div 我的页面上有 s 单击后会转换为 TinyMCE 编辑器部分 因此 用户只需双击 div 然后使用 TinyMCE 编辑其中的文本即可 我的问题是 是否可以在 div 没有实际选择里面的文本 我的意思是 我想实现以下用例
  • 在 jpa 中调用序列的下一个值

    我有一个映射为实体的类 以将其保存在数据库中 我有一个 id 字段作为主键 因此每次保留对象时 都会从序列 myClass pk seq 中检索 id 的值 代码如下所示 Entity Table name myObjects public
  • 从另一个项目修改 Windows 窗体控件

    我有一个控制lblDate在用户控制中MainScreen 我想在类的方法中修改它Date 这是在另一个项目中AoWLibrary 我无法引用它 因为 AoWLibrary 是第一个项目的依赖项 我尝试将 lblDate 设为静态 但编译器
  • 是否可以将 TypeTag 转换为 Manifest?

    我们的库使用 TypeTags 但现在我们需要与另一个需要清单的库进行交互 有没有简单的方法可以从 TypeTag 创建清单 如果你天真地尝试召唤一个Manifest when a TypeTag存在 编译器会给你一个解决方案的提示 imp
  • 如何在 Qt 中制作可展开/可折叠的部分小部件

    我想在 Qt 中创建一个具有以下功能的自定义小部件 它是一个容器 它可以填充任何 Qt 布局 它可以在任何 Qt 布局内 按钮允许垂直折叠 折叠内容 因此只有按钮可见 所有包含的布局都是不可见的 上一个按钮允许将其再次展开 展开到布局内容的
  • Mongo 对象 ID 不相等

    new Mongo ObjectID 18986769bd5eaaa42cb565b1 new Mongo ObjectID 18986769bd5eaaa42cb565b1 返回假 new Mongo ObjectID 18986769b
  • 使用ES6 Proxy和node.js出现非法调用错误

    我不明白为什么以下代码不起作用 var os new Proxy require os console log os cpus TypeError Illegal invocation whereas var os require os c
  • 如何在 python 中发送原始以太网帧?

    我需要在几天内完成一个项目 它是一个基本的客户端和服务器界面 问题是它必须是所有原始套接字 我创建它没有问题 我只是坚持发送数据包 首先我尝试将它绑定到一个接口 en1 但它一直给我一个错误nodename not known 当我将它绑定
  • 实施 PT_DENY_ATTACH 反盗版代码

    我一直在尝试实现此 wiki 中的以下反盗版代码 http theiphonewiki com wiki index php title Bugging Debuggers 但是 尽管严格遵循它 我的应用程序仍以 Program exite
  • 警告:文件大小():img.jpg 统计失败

    我正在尝试获取图像的文件大小 但我不断得到Warning filesize stat failed for img jpg 这就是我所做的 path FILES profile name path iconv UTF 8 ISO 8859
  • 使用UIImagePickerController获取图片——如何知道保存的是PNG还是JPEG?

    我有一个UIImagePickerController让用户从图像库中选择图像 并通过didFinishPickingMediaWithInfo method 我需要能够将生成的图像保存到磁盘 在应用程序的文档文件夹中 并稍后重新加载 问题