2014年1月18日土曜日

[iOS][Objective-C]アスペクト比を保ってUIImageをリサイズ


どうも。

画像のリサイズというのも、
色んなシーンで必要になることが多い。

その場合、
「アスペクト比を保って、300×300の範囲内で」
のようなことがほとんど。

画像を扱うとなると、
複数回の登場も予想されるので、
例えば、
utilクラスにクラスメソッドとして実装するとすれば…。


// アスペクト比を保ってUIImageをリサイズ
+ (UIImage*)resizeAspectFitWithSize:(UIImage *)srcImg size:(CGSize)size {
 
    CGFloat widthRatio  = size.width  / srcImg.size.width;
    CGFloat heightRatio = size.height / srcImg.size.height;
    CGFloat ratio = (widthRatio < heightRatio) ? widthRatio : heightRatio;
 
    CGSize resizedSize = CGSizeMake(srcImg.size.width*ratio, srcImg.size.height*ratio);
 
    UIGraphicsBeginImageContext(resizedSize);
    [srcImg drawInRect:CGRectMake(0, 0, resizedSize.width, resizedSize.height)];
    UIImage* resizedImage = UIGraphicsGetImageFromCurrentImageContext();
 
    UIGraphicsEndImageContext();
 
    return resizedImage;
}

上記のコードにより、
リサイズして、
その画像を表示する場合、
注意が必要。

意図した通りにリサイズされていたとしても、
UIImageViewの設定次第では、
思ったように表示されない可能性があるので、
そちらを併せて確認する必要がある。

で、
これをJPGやPNGにしたい場合は、
標準で準備されている、
下記の関数を使用して、
NSData*として取得する。

NSData * UIImageJPEGRepresentation (
   UIImage *image,
   CGFloat compressionQuality
);

// ex
NSData *imgData = UIImageJPEGRepresentation(img, 0.8f);


NSData * UIImagePNGRepresentation (
   UIImage *image
);

// ex
NSData *imgData = UIImagePNGRepresentation(img);



それでは。
ちゃお☆


まこぴー。