UIImagePNGRepresentation(UIImage())返回nil

Rod*_*uiz 9 uiimage uiimagepngrepresentation swift

为什么要UIImagePNGRepresentation(UIImage())回报nil

我正在尝试UIImage()在我的测试代码中创建一个断言它是否正确传递.

我对两个UIImage的比较方法使用了UIImagePNGRepresentation(),但由于某种原因,它正在返回nil.

谢谢.

Joj*_*dmo 11

UIImagePNGRepresentation()nil如果提供的UIImage不包含任何数据,则返回.来自UIKit文档:

回报价值

包含PNG数据的数据对象,如果生成数据时出现问题,则为nil.如果图像没有数据或者底层CGImageRef包含不支持的位图格式的数据,则此函数可能返回nil.

UIImage通过简单地使用初始化a时UIImage(),它会创建一个UIImage没有数据.虽然不是nil,但它仍然没有数据,因此UIImagePNGRepresentation()无法返回任何数据,使其返回nil.

要解决此问题,您必须使用UIImage数据.例如:

var imageName: String = "MyImageName.png"
var image = UIImage(named: imageName)
var rep = UIImagePNGRepresentation(image)
Run Code Online (Sandbox Code Playgroud)

imageName您的图像名称在哪里,包含在您的应用程序中.

为了使用UIImagePNGRepresentation(image),image必须不是nil,它必须有数据(UIImage()创建一个不是nil,但没有任何数据的图像).

如果要检查他们是否有任何数据,您可以使用:

if(image == nil || image == UIImage()){
  //image is nil, or has no data
}
else{
  //image has data
}
Run Code Online (Sandbox Code Playgroud)


rob*_*off 5

UIImage文件说:

图像对象是不可变的,因此您无法在创建后更改其属性。这意味着您通常在初始化时指定图像的属性或依赖图像的元数据来提供属性值。

由于您在UIImage没有提供任何图像数据的情况下创建了,因此您创建的对象作为图像没有任何意义。UIKit 和 Core Graphics 似乎不允许 0x0 图像。

最简单的解决方法是创建一个 1x1 图像:

UIGraphicsBeginImageContext(CGSizeMake(1, 1))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
Run Code Online (Sandbox Code Playgroud)