UIImage から縮小画像を生成する

2010年6月30日水曜日 | Published in | 2 コメント

このエントリーをはてなブックマークに追加

UIImage からサムネイル用途で使用する縮小画像を作る。

縮小処理


こんな感じ。
@implementation UIImage (extension)

- (UIImage*)imageByShrinkingWithSize:(CGSize)size
{
 CGFloat widthRatio  = size.width  / self.size.width;
 CGFloat heightRatio = size.height / self.size.height;
 
 CGFloat ratio = (widthRatio < heightRatio) ? widthRatio : heightRatio;

 if (ratio >= 1.0) {
  return self;
 }

 CGRect rect = CGRectMake(0, 0,
     self.size.width  * ratio,
     self.size.height * ratio);
 
 UIGraphicsBeginImageContext(rect.size);

 CGContextRef context = UIGraphicsGetCurrentContext();
 [self drawInRect:rect];

 UIImage* shrinkedImage = UIGraphicsGetImageFromCurrentImageContext();
 
 UIGraphicsEndImageContext();
 
 return shrinkedImage;
}
UIImage のカテゴリとして実装した。縦横比は保持したまま、与えられたサイズ内に収まる最大の画像を返す。


参考情報

補間方法を指定してUIImageを縮小する(1) - tosh-tの日記
画像を縮小する時の補完方法について

Responses

  1. tokyopengwyn
    2011年5月10日 21:24

    あのー...
    UIGraphicsBeginImageContext(rect.size);

    UIGraphicsBeginImageContext(size);
    ではないですか?
    縦横比が保持されないのでびっくりしました。
    それと、
    CGContextRef context = UIGraphicsGetCurrentContext();
    は、必要ない気がします。

  2. tokyopengwyn
    2011年5月10日 21:24

    あのー...
    UIGraphicsBeginImageContext(rect.size);

    UIGraphicsBeginImageContext(size);
    ではないですか?
    縦横比が保持されないのでびっくりしました。
    それと、
    CGContextRef context = UIGraphicsGetCurrentContext();
    は、必要ない気がします。

  3. xcatsan says:
    2011年5月10日 22:25

    こんばんは。コメントどうも。

    CGContextRef context = UIGraphicsGetCurrentContext();
    は指摘の通り不要ですね。


    UIGraphicsBeginImageContext(rect.size);
    ですが、うまくいかないですか?私のところではうまくいってますよ。

    UIGraphicsBeginImageContext(size);
    にするとできあがった画像サイズは縦横比が保持されません。
    (例えば、[image imageByShrinkingWithSize:CGSizeMake(100,900)] と
    すると元の画像の縦横比とは無関係に 100x900サイズの画像が返されます)。

    では。

  4. xcatsan says:
    2011年5月10日 22:25

    こんばんは。コメントどうも。

    CGContextRef context = UIGraphicsGetCurrentContext();
    は指摘の通り不要ですね。


    UIGraphicsBeginImageContext(rect.size);
    ですが、うまくいかないですか?私のところではうまくいってますよ。

    UIGraphicsBeginImageContext(size);
    にするとできあがった画像サイズは縦横比が保持されません。
    (例えば、[image imageByShrinkingWithSize:CGSizeMake(100,900)] と
    すると元の画像の縦横比とは無関係に 100x900サイズの画像が返されます)。

    では。

Leave a Response

人気の投稿(過去 30日間)