-(void)takePhoto
{
//播放声音(消声的)
[[VoiceUtil instance]playBlankSound];
//根据设备输出获得连接
AVCaptureConnection *captureConnection = [_captureStillImageOutput connectionWithMediaType:AVMediaTypeVideo];
//根据连接取得设备输出的数据
[_captureStillImageOutput captureStillImageAsynchronouslyFromConnection:captureConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (imageDataSampleBuffer) {
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
UIImage *image = [UIImage imageWithData:imageData];
//加入两个方法;
image = [self cutImage:image];
image = [self fixOrientation:image];
// NSData *data = UIImageJPEGRepresentation(image, 0.3);
// UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(takePhotoCompletion:sessionId:)]) {
[self.delegate takePhotoCompletion:image sessionId:self.sessionId];
[self endAniamtion];
}
}
}];
}
//裁剪image
- (UIImage *)cutImage:(UIImage *)srcImg {
//注意:这个rect是指横屏时的rect,即屏幕对着自己,home建在右边
CGRect rect = CGRectMake((srcImg.size.height / CGRectGetHeight(self.view.frame)) * 70, 0, srcImg.size.width * 1.33, srcImg.size.width);
CGImageRef subImageRef = CGImageCreateWithImageInRect(srcImg.CGImage, rect);
CGFloat subWidth = CGImageGetWidth(subImageRef);
CGFloat subHeight = CGImageGetHeight(subImageRef);
CGRect smallBounds = CGRectMake(0, 0, subWidth, subHeight);
//旋转后,画出来
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, 0, subWidth);
transform = CGAffineTransformRotate(transform, -M_PI_2);
CGContextRef ctx = CGBitmapContextCreate(NULL, subHeight, subWidth,
CGImageGetBitsPerComponent(subImageRef), 0,
CGImageGetColorSpace(subImageRef),
CGImageGetBitmapInfo(subImageRef));
CGContextConcatCTM(ctx, transform);
CGContextDrawImage(ctx, smallBounds, subImageRef);
CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
//旋转image
- (UIImage *)fixOrientation:(UIImage *)srcImg
{
CGAffineTransform transform = CGAffineTransformIdentity;
CGFloat width = srcImg.size.width;
CGFloat height = srcImg.size.height;
CGContextRef ctx;
switch ([[UIDevice currentDevice] orientation]) {
case UIDeviceOrientationUnknown:
case UIDeviceOrientationFaceUp:
case UIDeviceOrientationFaceDown:
case UIDeviceOrientationPortrait:
case UIDeviceOrientationPortraitUpsideDown: //竖屏,不旋转
ctx = CGBitmapContextCreate(NULL, width, height,
CGImageGetBitsPerComponent(srcImg.CGImage), 0,
CGImageGetColorSpace(srcImg.CGImage),
CGImageGetBitmapInfo(srcImg.CGImage));
break;
case UIDeviceOrientationLandscapeLeft: //横屏,home键在右手边,逆时针旋转90°
transform = CGAffineTransformTranslate(transform, 0, width);
transform = CGAffineTransformRotate(transform, -M_PI_2);
ctx = CGBitmapContextCreate(NULL, height, width,
CGImageGetBitsPerComponent(srcImg.CGImage), 0,
CGImageGetColorSpace(srcImg.CGImage),
CGImageGetBitmapInfo(srcImg.CGImage));
break;
case UIDeviceOrientationLandscapeRight: //横屏,home键在左手边,顺时针旋转90°
transform = CGAffineTransformTranslate(transform, height, 0);
transform = CGAffineTransformRotate(transform, M_PI_2);
ctx = CGBitmapContextCreate(NULL, height, width,
CGImageGetBitsPerComponent(srcImg.CGImage), 0,
CGImageGetColorSpace(srcImg.CGImage),
CGImageGetBitmapInfo(srcImg.CGImage));
break;
default:
break;
}
CGContextConcatCTM(ctx, transform);
CGContextDrawImage(ctx, CGRectMake(0,0,width,height), srcImg.CGImage);
CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}