Skip to content

UIViewをUIImageに変換すれば画像合成しやすい

2013年6月24日

カメラアプリやってて、文字を写真に合成したいとき、「UILabelそのまんまUIImageにできちゃえばさくっと合成できるんじゃ?」と思って色々やってみたらできちゃった。

ソースは以下の感じ(ARC使用)

ImageUtilというクラスを作って、そこで動かしてるイメージ。

+ (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return img;
}

こうすると、渡したUIViewがUIImageになって帰ってきます。
もちろんsubViewもUIImage化されて返ってくるので、合成したいものをUIViewに乗せまくってぽいっと渡しちゃえばOKです。

あとは、合成したいUIImage同士を以下な感じで合成しちゃえばオッケー。

-(UIImage*)gouseiImage:(UIImage*)sourceImage
          composeImage:(UIImage*)composeImage
                 width:(NSInteger)width
                height:(NSInteger)height
{
    
    // グラフィックスコンテキストを作る
    CGSize size = { width, height };
    UIGraphicsBeginImageContext(size);
    
    //元画像を描画
    CGRect rect;
    rect.origin = CGPointZero;
    rect.size = size;
    [sourceImage drawInRect:rect];
    
    //重ね合わせる画像を描画
    rect.origin = CGPointMake(0, 0);
    rect.size = CGSizeMake(width, height);
    [composeImage drawInRect:rect];
    
    // 描画した画像を取得する
    UIImage* shrinkedImage;
    shrinkedImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    return shrinkedImage;
    
}

おかげで見た目通りに合成することができた。
便利。

広告

From → iPhone開発

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。