Objective-C
iPhone
Xcode
iOS
CoreData

CoreDataに画像のサムネイルをバイナリデータで保存する

More than 5 years have passed since last update.

100KB以下のちいさい画像ならCoreDataのモデルにいきなり入れちゃってもOK

  • UIImageをいい感じに四角く切り取って縮小するメソッドをつくる
- (UIImage *)cropImageView:(UIImage *)image
{
    // 切り取る
    float origin_width = image.size.width;
    float origin_heigt = image.size.width;
    CGRect cropRect;
    if (origin_heigt <= origin_width) {
        float x = origin_width / 2 - origin_heigt / 2;
        float y = 0;
        cropRect = CGRectMake(x, y, origin_heigt, origin_heigt);
    } else {
        float x = 0;
        float y = origin_heigt / 2 - origin_width / 2;
        cropRect = CGRectMake(x, y, origin_width, origin_width);
    }
    CGImageRef cgimage = CGImageCreateWithImageInRect(image.CGImage, cropRect);
    UIImage *cropImage = [UIImage imageWithCGImage:cgimage];

    // 縮小する
    CGSize thumbSize = CGSizeMake(80, 80);
    UIGraphicsBeginImageContext(thumbSize);
    [cropImage drawInRect:CGRectMake(0, 0, thumbSize.width, thumbSize.height)];
    UIImage * thumbImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return thumbImage;
}
  • 上記のメソッドからデータを取得して、CoreDataへ保存する
  • thumbは、CoreDataのスキーマ設定でBinary Dataに設定しておくだけでOK
UIImage *thumbImage = [self cropImageView:image];
NSData *dataCropImage = UIImagePNGRepresentation(thumbImage);

Photo *photo = [NSEntityDescription insertNewObjectForEntityForName:@"Photo" inManagedObjectContext:self.managedObjectContext];
[photo setValue:dataCropImage forKey:@"thumb"];
  • このサムネイルをDBから取り出して、UITableViewCell上のUIImageViewにセットするには
NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSData *data = [managedObject valueForKey:@"thumb"];
UIImage *img = [UIImage imageWithData:data];
cell.photoThumbImageView.image = img;