SHIBUYA JACK
渋谷ジャック

$Ando Design Studio 安藤デザインスタジオ

230円

タワーレコードの広告を見てたら、突然閃きました。

渋谷のスクランブル交差点から見える看板が、全部自分の広告だったらすごいなと思って作りました。
画像を撮影したりアルバムから選ぶと、渋谷中の広告が自分のものに大変身!!


$Ando Design Studio 安藤デザインスタジオ
109の看板に俺の顔が!!


$Ando Design Studio 安藤デザインスタジオ
ライトアップされるとキレイ


$Ando Design Studio 安藤デザインスタジオ
どんだけ自分好きなんだよって感じで


iPhoneアプリ開発用
夏場の暑い日に汗だくで撮った画像を、看板の部分だけ切り抜いて画像を合成。
Scroll ViewにImage Viewを貼り込んでいきました。

カメラで撮影する、アルバムから選ぶコード
- (void)actionSheet:(UIActionSheet*)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
// ボタンインデックスをチェックする
if (buttonIndex >= 3) {
return;
}

// ソースタイプを決定する
UIImagePickerControllerSourceType sourceType = 0;
switch (buttonIndex) {
case 0: {
sourceType = UIImagePickerControllerSourceTypeCamera;
break;
}
case 1: {
sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
break;
}
case 2: {
sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
break;
}

}

// 使用可能かどうかチェックする
if (![UIImagePickerController isSourceTypeAvailable:sourceType]) {
return;
}

// イメージピッカーを作る
UIImagePickerController* imagePicker;
imagePicker = [[UIImagePickerController alloc] init];
[imagePicker autorelease];
imagePicker.sourceType = sourceType;
imagePicker.allowsImageEditing = YES;
imagePicker.delegate = self;

// イメージピッカーを表示する
[self presentModalViewController:imagePicker animated:YES];
}

//--------------------------------------------------------------//
#pragma mark -- UIImagePickerControllerDelegate --
//--------------------------------------------------------------//

- (void)imagePickerController:(UIImagePickerController*)picker
didFinishPickingImage:(UIImage*)image
editingInfo:(NSDictionary*)editingInfo {

// イメージピッカーを隠す
[self dismissModalViewControllerAnimated:YES];

// オリジナル画像を取得する
UIImage* originalImage;
originalImage = [editingInfo objectForKey:UIImagePickerControllerOriginalImage];

// グラフィックスコンテキストを作る
CGSize size = { 960, 960 };
UIGraphicsBeginImageContext(size);

// 画像を縮小して描画する
CGRect rect;
rect.origin = CGPointZero;
rect.size = size;
[originalImage drawInRect:rect];

// 描画した画像を取得する
UIImage* shrinkedImage;
shrinkedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// CGImageを取得する
CGImageRef cgImage;
cgImage = shrinkedImage.CGImage;

// 画像情報を取得する
size_t width;
size_t height;
size_t bitsPerComponent;
size_t bitsPerPixel;
size_t bytesPerRow;
CGColorSpaceRef colorSpace;
CGBitmapInfo bitmapInfo;
bool shouldInterpolate;
CGColorRenderingIntent intent;
width = CGImageGetWidth(cgImage);
height = CGImageGetHeight(cgImage);
bitsPerComponent = CGImageGetBitsPerComponent(cgImage);
bitsPerPixel = CGImageGetBitsPerPixel(cgImage);
bytesPerRow = CGImageGetBytesPerRow(cgImage);
colorSpace = CGImageGetColorSpace(cgImage);
bitmapInfo = CGImageGetBitmapInfo(cgImage);
shouldInterpolate = CGImageGetShouldInterpolate(cgImage);
intent = CGImageGetRenderingIntent(cgImage);

// データプロバイダを取得する
CGDataProviderRef dataProvider;
dataProvider = CGImageGetDataProvider(cgImage);

// ビットマップデータを取得する
CFDataRef data;
UInt8* buffer;
data = CGDataProviderCopyData(dataProvider);
buffer = (UInt8*)CFDataGetBytePtr(data);


// 効果を与えたデータを作成する
CFDataRef effectedData;
effectedData = CFDataCreate(NULL, buffer, CFDataGetLength(data));

// 効果を与えたデータプロバイダを作成する
CGDataProviderRef effectedDataProvider;
effectedDataProvider = CGDataProviderCreateWithCFData(effectedData);

// 画像を作成する
CGImageRef effectedCgImage;
UIImage* effectedImage;
effectedCgImage = CGImageCreate(
width, height,
bitsPerComponent, bitsPerPixel, bytesPerRow,
colorSpace, bitmapInfo, effectedDataProvider,
NULL, shouldInterpolate, intent);
effectedImage = [[UIImage alloc] initWithCGImage:effectedCgImage];
[effectedImage autorelease];

// 画像を表示する
imageView1.image = image;
imageView2.image = image;
imageView3.image = image;
imageView4.image = image;
imageView5.image = image;
imageView6.image = image;
imageView7.image = image;
imageView8.image = image;
imageView9.image = image;
imageView10.image = image;
imageView11.image = image;
imageView12.image = image;
imageView13.image = image;
imageView14.image = image;
imageView15.image = image;
imageView16.image = image;
imageView17.image = image;
imageView18.image = image;
imageView19.image = image;
imageView20.image = image;
imageView21.image = image;
imageView22.image = image;
imageView23.image = image;
imageView24.image = image;


// 作成したデータを解放する
CGImageRelease(effectedCgImage);
CFRelease(effectedDataProvider);
CFRelease(effectedData);
CFRelease(data);
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController*)picker
{
// イメージピッカーを隠す
[self dismissModalViewControllerAnimated:YES];
}