我有UIImage的这个扩展:
extension UIImage {
func resizeImage(newWidth: CGFloat, newHeight: CGFloat? = nil) -> UIImage {
let scale = newWidth / self.size.width
let finalHeight = (newHeight == nil) ? self.size.height * scale : newHeight!
UIGraphicsBeginImageContextWithOptions(CGSize(width:newWidth, height: finalHeight), false, self.scale)
self.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: finalHeight))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
}
为什么UIGraphicsGetImageFromCurrentImageContext返回nil?它与图像大小有关吗?
(lldb)poself.size▿(3024.0,4032.0) - 宽度:3024.0 - 高度:4032.0
看起来像是实现了UIGraphicsBeginImageContextWithOptions,因此它试图为图像缓冲区分配一个连续的内存区域。该地区非常大,可以达到50MB。会发生什么是“malloc”调用返回null,并且对UIGraphicsBeginImageContextWithOptions的调用无提示失败。 malloc失败的原因可能与内存不足到内存碎片有所不同,这就是为什么这个问题的再现不一致的原因。
我也遇到了这个问题。 UIGraphicsGetImageFromCurrentImageContext()
第一次返回nil,但第二次使用相同的代码可以获得返回数据。最后我发现,如果视图的子视图大小为零,则会出现此问题。因此,我建议您检查并删除视图的大小为零的子视图。我希望能为你效劳!