最近在改项目的bug,发现UIImagePNGRepresentation返回的值为空,然后在网上大概查了下也没有找到结果,因为在之前的一个项目中我也使用过这个方法,然后那个项目并没有返回nil。所以很懊恼,然后看了下api。我靠,竟然明文说明了有可能会返回nil的情况。
UIKIT_EXTERN NSData * __nullable UIImagePNGRepresentation(UIImage * __nonnull image); // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap formatUIKIT_EXTERN NSData * __nullable UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality); // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)复制代码
May return nil if image has no CGImageRef or invalid bitmap format 解决方法就是重新给他绘制一个图就行了:
- (UIImage *)scaleImage:(UIImage *)image{ //确定压缩后的size CGFloat scaleWidth = image.size.width; CGFloat scaleHeight = image.size.height; CGSize scaleSize = CGSizeMake(scaleWidth, scaleHeight); //开启图形上下文 UIGraphicsBeginImageContext(scaleSize); //绘制图片 [image drawInRect:CGRectMake(0, 0, scaleWidth, scaleHeight)]; //从图形上下文获取图片 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); //关闭图形上下文 UIGraphicsEndImageContext(); return newImage;}复制代码