ios - UIImagePickerController 的图像是否可能没有 CGImage 值?

标签 ios swift uiimage uiimagepickercontroller cgimage

我试图减少代码中的强制展开,但有时我也不想编写 if let 检查(如果它们不是必需的)。

我注意到我在代码的一个特定部分进行了很多强制解包,用户用相机或手机库拍照,然后我裁剪并压缩它。这是所有强制解包的过程:

  1. 我强制从 imagePickerController(picker: didFinishPickingMediaWithInfo:) 函数解开图像:

    let pickedImage = info[UIImagePickerControllerOriginalImage] as! UIImage`
    

    我对此感到非常安全,因为我有 imagePicker.mediaTypes = [kUTTypeImage as String]

  2. 我使用CGImageCreateWithImageInRect来裁剪图像,它的第一个参数是一个CGImage,我强制将其展开。这是我最大的假设,虽然我从未发生过车祸,但我仍然知道它不安全。

    let cgImage = CGImageCreateWithImageInRect(pickedImage.CGImage!, cropRect)
    let croppedImage = UIImage(CGImage: cgImage)
    
  3. 我使用返回NSDataUIImageJPEGRepresentation,但如果图像没有CGImageRef,则可能返回nil 。我也根据我之前的假设强行打开它。

    let jpegData = UIImageJPEGRepresentation(croppedImage, 0.85)
    
  4. 我再次通过强制展开来创建结果图像,因为我假设 jpegData 不是 nil

    let resultImage = UIImage(data: jpegData)!
    

TLDR:UIImagePickerController 是否有可能返回没有 CGImage 的图像?如果是,我将在步骤 1 和 2 之间添加检查以查看是否存在 CGImage 值。我仍然可以安全地强制解开其他步骤吗?

最佳答案

是的,UIImage 的 CGImage 属性可以为 NULL

If the UIImage object was initialized using a CIImage object, the value of the property is NULL.

来源:https://developer.apple.com/reference/uikit/uiimage/1624147-cgimage

关于ios - UIImagePickerController 的图像是否可能没有 CGImage 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42244753/

相关文章:

iphone - Notes App 中覆盖 UITextView 的键盘

ios - Swift:创建模块(命名空间)

ios - 需要使用+ ios( objective-c 或Swift)将数据从(A)线程共享到(B)线程

ios - 如何将 .txt 文件的一部分加载到 TextView 上以消除延迟现象

iphone - 应用程序无法看到 @2x 图像

ios - 如何在 ios 的 Xamarin 谷歌地图组件中处理点击事件

php - 如何在 Swift 中解析从 php 接收到的数据编码?

ios - uiimageview 上的特定形状图像

ios - 如何在 UITableView 中将 SF 符号相互对齐?

ios - 旋转时更改自定义键盘的高度