Objective-Cで画像のリサイズ

画像トリミングについて imagePickerControllerで取得した画像をリサイズしてから使う方が何かと便利かも.

-(void)imagePickerController:(UIImagePickerController*)picker
didFinishPickingMediaWithInfo:(NSDictionary*)info

ピッカーで画像選択後,infoにNSDictionary型で画像データが格納されているので,

UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

縦横比率を保ちながら縮小。 例えばどちらかの辺(縦か横か)を320pxにする。

CGImageRef imageRef = [image CGImage];
size_t w = CGImageGetWidth(imageRef);
size_t h = CGImageGetHeight(imageRef);
if (w < h) {
  //縦辺が長い場合
  resize_w = 320;
  resize_h = h * resize_w / w; //横幅と同じ比率
} else {
  //横辺が長い場合
  resize_h = 320;
  resize_w = w * resize_h / h;
}

//得た画像サイズをUIGraphicsBeginImageContext()にセットして書き込む
UIImage *newImage = [UIImage alloc] init];
UIGraphicsBeginImageContext(CGSizeMake(resize_w, resize_h));
[newImage drawInRect:CGRectMake(0, 0, resize_w, resize_h)];
newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

newImageにはリサイズされたImageが入る.