UIImagePNGRepresentation(UIImage()) returns 无

UIImagePNGRepresentation(UIImage()) returns nil

为什么 UIImagePNGRepresentation(UIImage()) returns nil?

我正在尝试在我的测试代码中创建一个 UIImage() 只是为了断言它已正确传递。

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

谢谢。

UIImagePNGRepresentation() will return nil if the UIImage provided does not contain any data. From the UIKit Documentation:

Return Value

A data object containing the PNG data, or nil if there was a problem generating the data. This function may return nil if the image has no data or if the underlying CGImageRef contains data in an unsupported bitmap format.

当您通过简单地使用 UIImage() 初始化 UIImage 时,它会创建一个没有数据的 UIImage。虽然图像不是零,但它仍然没有数据。而且,因为图像没有数据,所以 UIImagePNGRepresentation() 只是 returns 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
}

UIImage documentation

Image objects are immutable, so you cannot change their properties after creation. This means that you generally specify an image’s properties at initialization time or rely on the image’s metadata to provide the property value.

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

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

UIGraphicsBeginImageContext(CGSizeMake(1, 1))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

我在将 UIImage 转换为 pngData 时遇到了同样的问题,但有时 returns 没有。我通过创建图像副本来修复它

       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
        }