圖片旋轉(zhuǎn) 解決數(shù)著拍照自動旋轉(zhuǎn)90度

-?(UIImage*)fixOrientation:(UIImage*)aImage?{

//?No-op?if?the?orientation?is?already?correct

if(aImage.imageOrientation==?UIImageOrientationUp)

returnaImage;

//?We?need?to?calculate?the?proper?transformation?to?make?the?image?upright.

//?We?do?it?in?2?steps:?Rotate?if?Left/Right/Down,?and?then?flip?if?Mirrored.

CGAffineTransform?transform?=?CGAffineTransformIdentity;

switch(aImage.imageOrientation)?{

caseUIImageOrientationDown:

caseUIImageOrientationDownMirrored:

transform?=?CGAffineTransformTranslate(transform,?aImage.size.width,?aImage.size.height);

transform?=?CGAffineTransformRotate(transform,?M_PI);

break;

caseUIImageOrientationLeft:

caseUIImageOrientationLeftMirrored:

transform?=?CGAffineTransformTranslate(transform,?aImage.size.width,0);

transform?=?CGAffineTransformRotate(transform,?M_PI_2);

break;

caseUIImageOrientationRight:

caseUIImageOrientationRightMirrored:

transform?=?CGAffineTransformTranslate(transform,0,?aImage.size.height);

transform?=?CGAffineTransformRotate(transform,?-M_PI_2);

break;

default:

break;

}

switch(aImage.imageOrientation)?{

caseUIImageOrientationUpMirrored:

caseUIImageOrientationDownMirrored:

transform?=?CGAffineTransformTranslate(transform,?aImage.size.width,0);

transform?=?CGAffineTransformScale(transform,?-1,1);

break;

caseUIImageOrientationLeftMirrored:

caseUIImageOrientationRightMirrored:

transform?=?CGAffineTransformTranslate(transform,?aImage.size.height,0);

transform?=?CGAffineTransformScale(transform,?-1,1);

break;

default:

break;

}

//?Now?we?draw?the?underlying?CGImage?into?a?new?context,?applying?the?transform

//?calculated?above.

CGContextRef?ctx?=?CGBitmapContextCreate(NULL,?aImage.size.width,?aImage.size.height,

CGImageGetBitsPerComponent(aImage.CGImage),0,

CGImageGetColorSpace(aImage.CGImage),

CGImageGetBitmapInfo(aImage.CGImage));

CGContextConcatCTM(ctx,?transform);

switch(aImage.imageOrientation)?{

caseUIImageOrientationLeft:

caseUIImageOrientationLeftMirrored:

caseUIImageOrientationRight:

caseUIImageOrientationRightMirrored:

//?Grr...

CGContextDrawImage(ctx,?CGRectMake(0,0,aImage.size.height,aImage.size.width),?aImage.CGImage);

break;

default:

CGContextDrawImage(ctx,?CGRectMake(0,0,aImage.size.width,aImage.size.height),?aImage.CGImage);

break;

}

//?And?now?we?just?create?a?new?UIImage?from?the?drawing?context

CGImageRef?cgimg?=?CGBitmapContextCreateImage(ctx);

UIImage*img?=?[UIImageimageWithCGImage:cgimg];

CGContextRelease(ctx);

CGImageRelease(cgimg);

returnimg;

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容