计算内存中图像的大小(以字节为单位)

时间:2015-01-03 16:52:05

标签: ios swift uiimage

我正在Swift中编写一个小应用来调整图像大小。我想计算调整大小的图像的大小(以字节/ KB为单位)。我怎么做?

以下是我正在处理的代码:

var assetRepresentation :  ALAssetRepresentation = asset.defaultRepresentation()

self.originalImageSize = assetRepresentation.size()

selectedImageSize = self.originalImageSize

// now scale the image
let image = selectedImage
let hasAlpha = false
let scale: CGFloat = 0.0 // Automatically use scale factor of main screen

UIGraphicsBeginImageContextWithOptions(sizeChange, !hasAlpha, scale)
image.drawInRect(CGRect(origin: CGPointZero, size: sizeChange))

let scaledImage = UIGraphicsGetImageFromCurrentImageContext()

self.backgroundImage.image = scaledImage

由于尚未保存scaledImage,我该如何计算其大小?

2 个答案:

答案 0 :(得分:8)

由于您希望向用户显示文件大小,NSByteCountFormatter是一个很好的解决方案。它需要NSData,并且可以以人类可读的格式(如1 KB,2 MB等)输出表示数据大小的String。

由于你正在处理UIImage,你必须将UIImage转换为NSData才能使用它,例如,可以使用UIImagePNGRepresentation()UIImageJPEGRepresentation()来完成,以指定的格式返回NSData代表图像。用法示例可能如下所示:

let data = UIImagePNGRepresentation(scaledImage)
let formatted = NSByteCountFormatter.stringFromByteCount(
    Int64(data.length),
    countStyle: NSByteCountFormatterCountStyle.File
)

println(formatted)

修改:如果您的标题显示,您希望以特定的度量单位(字节)显示此信息,则也可以使用NSByteCountFormatter实现。您只需创建该类的实例并设置其allowedUnits属性。

let data = UIImagePNGRepresentation(scaledImage)
let formatter = NSByteCountFormatter()

formatter.allowedUnits = NSByteCountFormatterUnits.UseBytes
formatter.countStyle = NSByteCountFormatterCountStyle.File

let formatted = formatter.stringFromByteCount(Int64(data.length))

println(formatted) 

答案 1 :(得分:1)

我用它来创建我的图像:

var imageBuffer: UnsafeMutablePointer<UInt8> = nil
let ctx = CGBitmapContextCreate(imageBuffer, UInt(width), UInt(height), UInt(8), bitmapBytesPerRow, colorSpace, bitmapInfo)

自动分配imageBuffer(参见相应文档)。