Skip to content

Instantly share code, notes, and snippets.

@hirokim
Created December 18, 2014 08:55
Show Gist options
  • Select an option

  • Save hirokim/ef5d1f2577b7272a0f0a to your computer and use it in GitHub Desktop.

Select an option

Save hirokim/ef5d1f2577b7272a0f0a to your computer and use it in GitHub Desktop.
UIImageの向きを統一するために作り直す処理
// 度数をラジアンに変換するマクロ
static inline double radians (double degrees) {return degrees * M_PI/180;}
/**
* UIImageの向きを統一するために作り直す
*
*/
+ (UIImage*)remakeImageForOrientation:(UIImage*)originalImage {
// 変換が不要なものはそのままリターン
if (originalImage.imageOrientation == UIImageOrientationUp) {
return originalImage;
}
// CGImageRefをoriginalImageから新たに作成する
CGRect rect = CGRectMake(0, 0, originalImage.size.width, originalImage.size.height);
CGImageRef imageRef = CGImageCreateWithImageInRect([originalImage CGImage], rect);
// ビットマップ情報、色情報を取得
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef);
// 元画像をセットしてあるコンテキストを生成
CGContextRef bitmap = CGBitmapContextCreate(NULL, rect.size.width, rect.size.height, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);
// 元画像の持っている向きで画像を回転させて描画領域内に移動してコンテキストに描画
if (originalImage.imageOrientation == UIImageOrientationLeft) {
CGContextRotateCTM (bitmap, radians(90));
CGContextTranslateCTM (bitmap, 0, -rect.size.height);
CGContextDrawImage(bitmap, CGRectMake(0, 0, rect.size.height, rect.size.width), imageRef);
} else if (originalImage.imageOrientation == UIImageOrientationRight) {
CGContextRotateCTM (bitmap, radians(-90));
CGContextTranslateCTM (bitmap, -rect.size.height, 0);
CGContextDrawImage(bitmap, CGRectMake(0, 0, rect.size.height, rect.size.width), imageRef);
} else if (originalImage.imageOrientation == UIImageOrientationDown) {
CGContextTranslateCTM (bitmap, rect.size.width, rect.size.height);
CGContextRotateCTM (bitmap, radians(-180.));
CGContextDrawImage(bitmap, CGRectMake(0, 0, rect.size.width, rect.size.height), imageRef);
}
// コンテキストをUIImageに変換
CGImageRef ref = CGBitmapContextCreateImage(bitmap);
UIImage *resultImage=[UIImage imageWithCGImage:ref];
// 後処理
CGImageRelease(imageRef);
CGContextRelease(bitmap);
CGImageRelease(ref);
return resultImage;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment