Objective-Cで Photoshopのように画像を合成して表示する「DCBlendImage」クラスを作成しました。
ベース画像とブレンド画像、ブレンドモード、アルファ値、画像の寸法を指定して使用します。
下記よりファイルのダウンロードが行えます。
ダウンロード
使用する画像
使用方法
合成された UIImageを取得し画面に追加
1
2
3
4
5
UIImage * compositeImage = [ DCBlendImage blendImage: <ベース画像の UIImage > blendImage: <ブレンド画像の UIImage >
blendMode: kCGBlendModeScreen (ブレンドモード) blendAlpha: <ブレンド画像のアルファ値>
rect: <画像のレクタングル> ];
UIImageView * compositeImageView = [[ UIImageView alloc ] initWithImage: compositeImage ];
[ self . view addSubview: compositeImageView ];
合成された UIImageViewを取得し画面に追加
1
2
3
4
UIImageView * compositeImageView = [ DCBlendImage blendImageView: <ベース画像の UIImage > blendImage: <ブレンド画像の UIImage >
blendMode: kCGBlendModeScreen (ブレンドモード) blendAlpha: <ブレンド画像のアルファ値>
rect: <画像のレクタングル> ];
[ self . view addSubview: compositeImageView ];
ブレンドモードの種類
CGBlendMode
説明
kCGBlendModeMultiply
乗算
kCGBlendModeScreen
スクリーン
kCGBlendModeOverlay
オーバーレイ
kCGBlendModeDarken
比較(暗)
kCGBlendModeLighten
比較(明)
kCGBlendModeColorDodge
覆い焼きカラー
kCGBlendModeColorBurn
焼きこみカラー
kCGBlendModeSoftLight
ソフトライト
kCGBlendModeHardLight
ハードライト
kCGBlendModeDifference
差の絶対値
kCGBlendModeExclusion
除外
kCGBlendModeHue
色相
kCGBlendModeSaturation
彩度
kCGBlendModeColor
カラー
kCGBlendModeLuminosity
輝度
kCGBlendModeClear
透明色で描画
ソースコード
DCBlendImage.h
1
2
3
4
5
6
7
8
9
#import <UIKit/UIKit.h>
@interface DCBlendImage : UIImage
#pragma mark - public method
+ ( UIImage * ) blendImage: ( UIImage * ) baseImage blendImage: ( UIImage * ) blendImage blendMode: ( CGBlendMode ) blendMode blendAlpha: ( CGFloat ) blendAlpha rect: ( CGRect ) rect ;
+ ( UIImageView * ) blendImageView: ( UIImage * ) baseImage blendImage: ( UIImage * ) blendImage blendMode: ( CGBlendMode ) blendMode blendAlpha: ( CGFloat ) blendAlpha rect: ( CGRect ) rect ;
@end
DCBlendImage.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#import "DCBlendImage.h"
@implementation DCBlendImage
#pragma mark - Blend Image
// 合成された UIImage取得
+ ( UIImage * ) blendImage: ( UIImage * ) baseImage blendImage: ( UIImage * ) blendImage blendMode: ( CGBlendMode ) blendMode blendAlpha: ( CGFloat ) blendAlpha rect: ( CGRect ) rect
{
UIGraphicsBeginImageContext ( rect . size );
[ baseImage drawInRect: rect ];
[ blendImage drawInRect: rect blendMode: blendMode alpha: blendAlpha ];
UIImage * compositeImage = UIGraphicsGetImageFromCurrentImageContext ();
UIGraphicsEndImageContext ();
return compositeImage ;
}
#pragma mark - Blend Image View
// 合成された UIImageView取得
+ ( UIImageView * ) blendImageView: ( UIImage * ) baseImage blendImage: ( UIImage * ) blendImage blendMode: ( CGBlendMode ) blendMode blendAlpha: ( CGFloat ) blendAlpha rect: ( CGRect ) rect
{
UIGraphicsBeginImageContext ( rect . size );
[ baseImage drawInRect: rect ];
[ blendImage drawInRect: rect blendMode: blendMode alpha: blendAlpha ];
UIImage * compositeImage = UIGraphicsGetImageFromCurrentImageContext ();
UIGraphicsEndImageContext ();
UIImageView * compositeImageView = [[ UIImageView alloc ] initWithImage: compositeImage ];
return compositeImageView ;
}
@end
サンプルソースコード
ViewController.h
1
2
3
4
5
6
#define BASE_IMG_NAME @"Asymmetry_640_1136"
#define BASE_IMG_EXT @"jpg"
#define BLEND_IMG_NAME @"blend_image"
#define BLEND_IMG_EXT @"png"
#define BLEND_ALPHA 1.0
#define IMG_RECT CGRectMake(0, 0, 320, 568)
ViewController.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//合成された UIImageを取得し画面に追加
- ( void ) setCompositeImage
{
UIImage * baseImage = [ self getUIImageFromResources: BASE_IMG_NAME ext: BASE_IMG_EXT ];
UIImage * blendImage = [ self getUIImageFromResources: BLEND_IMG_NAME ext: BLEND_IMG_EXT ];
UIImage * compositeImage = [ DCBlendImage blendImage: baseImage blendImage: blendImage
blendMode: kCGBlendModeScreen blendAlpha: BLEND_ALPHA
rect: IMG_RECT ];
UIImageView * compositeImageView = [[ UIImageView alloc ] initWithImage: compositeImage ];
[ self . view addSubview: compositeImageView ];
}
//合成された UIImageViewを取得し画面に追加
- ( void ) setCompositeImageView
{
UIImage * baseImage = [ self getUIImageFromResources: BASE_IMG_NAME ext: BASE_IMG_EXT ];
UIImage * blendImage = [ self getUIImageFromResources: BLEND_IMG_NAME ext: BLEND_IMG_EXT ];
UIImageView * compositeImageView = [ DCBlendImage blendImageView: baseImage blendImage: blendImage
blendMode: kCGBlendModeScreen blendAlpha: BLEND_ALPHA
rect: IMG_RECT ];
[ self . view addSubview: compositeImageView ];
}
//画像ファイル取得
- ( UIImage * ) getUIImageFromResources: ( NSString * ) fileName ext: ( NSString * ) ext
{
NSString * path = [[ NSBundle mainBundle ] pathForResource: fileName ofType: ext ];
UIImage * img = [[ UIImage alloc ] initWithContentsOfFile: path ];
return ( img );
}
お薦めの参考書
本気ではじめるiPhoneアプリ作り Xcode 7.x+Swift 2.x対応
iOSアプリ開発をこれから始める方に最もお薦めな一冊です。解り辛い点は図解入りで解説されており、プログラミングの動作の仕組みから詳しく知ることができます。基本から通信処理まで押さえられており、アプリ公開の手順についても解説されています。