为什么UIImagePNGRepresentation(UIImage())返回nil
我试图在我的测试代码中创建一个UIImage(),只是为了断言它被正确地传递了。
我的两个UIImage的比较方法使用了UIImagePNGRepresentation(),但由于某种原因,它返回了nil。
谢谢。
发布于 2015-03-04 12:40:18
如果提供的UIImage不包含任何数据,则UIImagePNGRepresentation()将返回nil。从UIKit Documentation
返回值
包含PNG数据的数据对象,如果生成数据时出现问题,则返回nil。如果图像没有数据或基础CGImageRef包含不受支持的位图格式的数据,则此函数可能返回nil。
当您仅使用UIImage()初始化UIImage时,它会创建一个没有数据的UIImage。虽然图像不是空的,但它仍然没有数据。而且,因为图像没有数据,所以UIImagePNGRepresentation()只返回nil。
要解决这个问题,您必须对数据使用UIImage。例如:
var imageName: String = "MyImageName.png"
var image = UIImage(named: imageName)
var rep = UIImagePNGRepresentation(image)其中imageName是应用程序中包含的图像的名称。
为了使用UIImagePNGRepresentation(image),image不能是nil,并且它还必须有数据。
如果你想检查他们是否有任何数据,你可以使用:
if(image == nil || image == UIImage()){
//image is nil, or has no data
}
else{
//image has data
}发布于 2015-03-04 12:43:15
图像对象是不可变的,因此您无法在创建后更改其属性。这意味着您通常在初始化时指定图像的属性,或者依赖图像的元数据来提供属性值。
由于您创建的UIImage没有提供任何图像数据,因此您创建的对象作为图像没有任何意义。UIKit和核心显卡似乎不允许0x0图像。
最简单的解决方法是创建一个1x1镜像:
UIGraphicsBeginImageContext(CGSizeMake(1, 1))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()发布于 2020-07-21 15:25:23
我在将UIImage转换为pngData时遇到了同样的问题,但有时它会返回nil。我只是通过创建图像的副本来修复它
func getImagePngData(img : UIImage) -> Data {
let pngData = Data()
if let hasData = img.pngData(){
print(hasData)
pngData = hasData
}
else{
UIGraphicsBeginImageContext(img.size)
img.draw(in: CGRect(x: 0.0, y: 0.0, width: img.width,
height: img.height))
let resultImage =
UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
print(resultImage.pngData)
pngData = resultImage.pngData
}
return pngData
}https://stackoverflow.com/questions/28846705
复制相似问题