2012/10/01

[iOS][Objective-C]UIImageを使って画像のリサイズ

今、AVFoundationを使ってNSDataで画像データを取得するプログラムを書いていたのですが、とってきたデータをUIImageでリサイズするには、どうすればいいのかなーと思っていたら、素晴らしいエントリーがありました。

[XCODE] UIImageを任意のサイズにリサイズする方法

ものすごく大事なエントリーだと思うし、万が一、削除されてしまった時を考え、プログラムを引用します。

UIImage *aImage = /* UIImagePickerなどから画像を取得 */

// 取得した画像の縦サイズ、横サイズを取得する
int imageW = aImage.size.width;
int imageH = aImage.size.height;

// リサイズする倍率を作成する。
float scale = (imageW > imageH ? 320.0f/imageH : 320.0f/imageW);

// 比率に合わせてリサイズする。
// ポイントはUIGraphicsXXとdrawInRectを用いて、リサイズ後のサイズで、
// aImageを書き出し、書き出した画像を取得することで、
// リサイズ後の画像を取得します。
CGSize resizedSize = CGSizeMake(imageW * scale, imageH * scale);
UIGraphicsBeginImageContext(resizedSize);
[aImaged drawInRect:CGRectMake(0, 0, resizedSize.width, resizedSize.height)];
UIImage* resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
これとびきり重要なのが、
リサイズしたいサイズのデータを先に、UIGraphicsBeginImageContextを使って生成して、リサイズもとの画像データをそれにあわせているということ。で、その画像データを改めて違うクラスに設定しているという流れが重要なのかなと。

CGSizeMake関数の引数が、引用元では、それぞれ、
imageW * scale
imageH * scale
となっていたが、これを任意の数値にすれば、好きな形にリサイズすることができます。

大変、便利な処理なので、こうしてエントリーに書いておけばあらためて振り返ることができるので便利かなと。

0 コメント:

コメントを投稿