首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIImagePNGRepresentation(UIImage())返回nil

UIImagePNGRepresentation(UIImage())返回nil
EN

Stack Overflow用户
提问于 2015-03-04 12:31:12
回答 3查看 10.7K关注 0票数 10

为什么UIImagePNGRepresentation(UIImage())返回nil

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

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

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-04 12:40:18

如果提供的UIImage不包含任何数据,则UIImagePNGRepresentation()将返回nil。从UIKit Documentation

返回值

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

当您仅使用UIImage()初始化UIImage时,它会创建一个没有数据的UIImage。虽然图像不是空的,但它仍然没有数据。而且,因为图像没有数据,所以UIImagePNGRepresentation()只返回nil

要解决这个问题,您必须对数据使用UIImage。例如:

代码语言:javascript
复制
var imageName: String = "MyImageName.png"
var image = UIImage(named: imageName)
var rep = UIImagePNGRepresentation(image)

其中imageName是应用程序中包含的图像的名称。

为了使用UIImagePNGRepresentation(image)image不能是nil,并且它还必须有数据。

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

代码语言:javascript
复制
if(image == nil || image == UIImage()){
  //image is nil, or has no data
}
else{
  //image has data
}
票数 12
EN

Stack Overflow用户

发布于 2015-03-04 12:43:15

UIImage documentation

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

由于您创建的UIImage没有提供任何图像数据,因此您创建的对象作为图像没有任何意义。UIKit和核心显卡似乎不允许0x0图像。

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

代码语言:javascript
复制
UIGraphicsBeginImageContext(CGSizeMake(1, 1))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
票数 5
EN

Stack Overflow用户

发布于 2020-07-21 15:25:23

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

代码语言:javascript
复制
       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
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28846705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档