我正在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,我该如何计算其大小?
答案 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(参见相应文档)。