我想将UIImage保存到CoreData实体。
Per accepted answer here,为了将这个UIImage保存到同一个实体表中,UIImage的建议大小应该是< 100KB
因此,当用户从UIImagePickerController(库或相机)获取UIImage时,我想做一个UIImageJPEGRepresentation
@ CompressionQuality
速率来渲染这个UIImage数据< 100KB
玩弄
let imgData: NSData = UIImageJPEGRepresentation(CameraImage, <#compressionQuality: CGFloat#>)
let size = imgData.length
我已经意识到0.8不等于1.0%压缩的80%数据大小。
我怎样才能获取任何大小的UIImage并将其压缩为数据,大小 100kb ,以便保持尽可能多的完整性大小小到足以存储在CoreData Entity中?
注意:我最初的想法是测试UIImage的size
然后压缩它@&#34;率X = 100,000 / size&#34;
答案 0 :(得分:0)
您不需要将图像缩小到100kb以下,您只需创建二进制类型的Coredata属性并勾选“允许外部存储”框。 Coredata将为您处理剩下的事情:
imageData
的二进制类型属性并允许外部存储大于1MB的文件将存储在相对于数据库文件夹的单独文件夹中,而较小的文件将直接保存到sqlite文件中。
- (void)setImage:(UIImage*)image
{
NSData *data = UIImageJPEGRepresentation(image, 0.5);
if (data) {
[self setImageData:data];
}
}
- (UIImage*)image
{
UIImage *image = [UIImage imageWithData:self.imageData];
return image;
}