どうも。
画像のリサイズというのも、
色んなシーンで必要になることが多い。
その場合、
「アスペクト比を保って、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;
}
+ (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);
UIImage *image,
CGFloat compressionQuality
);
// ex
NSData *imgData = UIImageJPEGRepresentation(img, 0.8f);
NSData * UIImagePNGRepresentation (
UIImage *image
);
// ex
NSData *imgData = UIImagePNGRepresentation(img);
それでは。
ちゃお☆
まこぴー。