UIImage CompressionQuality 不是线性的
UIImage CompressionQuality not Linear
我想将 UIImage 保存到 CoreData 实体。
根据 accepted answer here,为了将此 UIImage 保存到同一实体 Table,建议的 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 实体中?
注意:我最初的想法是测试 size
的 UIImage 然后压缩它 @ "rate X = 100,000/size"
您不需要将图像缩小到 100kb 以下,您所要做的就是创建一个二进制类型的 Coredata 属性并勾选 "Allows External Storage" 框。 Coredata 会为您处理剩下的事情:
- 创建一个名为
imageData
的二进制类型的属性并允许外部存储
- 创建一个名为 'image' 的瞬态属性并按照以下方式实现自定义 getter 和 setter:
大于 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;
}
我想将 UIImage 保存到 CoreData 实体。
根据 accepted answer here,为了将此 UIImage 保存到同一实体 Table,建议的 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 实体中?
注意:我最初的想法是测试 size
的 UIImage 然后压缩它 @ "rate X = 100,000/size"
您不需要将图像缩小到 100kb 以下,您所要做的就是创建一个二进制类型的 Coredata 属性并勾选 "Allows External Storage" 框。 Coredata 会为您处理剩下的事情:
- 创建一个名为
imageData
的二进制类型的属性并允许外部存储 - 创建一个名为 'image' 的瞬态属性并按照以下方式实现自定义 getter 和 setter:
大于 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;
}