【Xcode5.1.1 + iOS 7.1 + MacOX10.9.4】
前回データ(変数)の保存について書きましたが、今回は画像です。アイコン程度の小さな画像をアプリ内に保存できるようにしたい。
・UIImageJPEGRepresentationを使って、画像をJPEG化。
・[NSHomeDirectory() stringByAppendingPathComponent:@”Documents”]で、データ保存用を一般的に使われるDocumentsディレクトリを指定する。
というところがミソのようです。
で、書いてみたコードがコレ。ここではカメラ/カメラロールを編集モードで呼び出した後に、250*250のjpegに保存する処理を書いています。カメラの呼び出しなどは割愛してます。関数「resize」は、自前の関数であることががわかるように書いておきました。
・YoheiM.NET [XCODE] iPhoneで画像をアプリケーション内に保存するには
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { //編集された画像を取得 UIImage *editedImage = (UIImage *)[info objectForKey:UIImagePickerControllerEditedImage]; // 画像をリサイズ UIImage *resize = [self resize:editedImage rect:CGRectMake(0, 0, 250, 250)]; //リサイズした画像をDocumentsフォルダに保存 NSData *data = UIImageJPEGRepresentation(resize, 1.0f); icon_count++; //画像をアプリ内部に保存 NSString *path = [NSString stringWithFormat:@"%@/newicon%@.jpg", [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"],[NSString stringWithFormat:@"%d",icon_count]]; //保存に成功・失敗したログをコンソールに出力(デバッグ用) if ([data writeToFile:path atomically:YES]) { NSLog(@"Save completed. %@",path); //保存した画像のパスを配列に追加 [_array_icon addObject:[NSString stringWithFormat:@"../Documents/newicon%@.jpg",[NSString stringWithFormat:@"%d",icon_count]]]; //アイコン画像配列:保存 if ([_delegate respondsToSelector:@selector(saveData)]){ [_delegate saveData]; } //画像一覧を再描画 [self.myCollectionView reloadData]; } else { NSLog(@"could not save"); } //---ここに保存後の処理を書く。 } //画像をリサイズする - (UIImage *)resize:(UIImage *)image rect:(CGRect)rect { UIGraphicsBeginImageContext(rect.size); [image drawInRect:rect]; UIImage* resizedImage = UIGraphicsGetImageFromCurrentImageContext(); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetInterpolationQuality(context, kCGInterpolationHigh); UIGraphicsEndImageContext(); return resizedImage; }
これで前回分と合わせると、保存した画像をアプリ起動時に呼び出せます。