如何在Instagram应用程序中使用avFoundation拍摄iphone中的方形图片?

时间:2012-06-07 09:51:28

标签: iphone camera uiimage avfoundation instagram

我正在像AVFoundation一样拍照: http://red-glasses.com/index.php/tutorials/ios4-take-photos-with-live-video-preview-using-avfoundation/

一个片段:

[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
 {
     CFDictionaryRef exifAttachments = CMGetAttachment( imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);
     if (exifAttachments)
     {
         // Do something with the attachments.
         NSLog(@"attachements: %@", exifAttachments);
     }
     else
         NSLog(@"no attachments");

     NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
     UIImage *image = [[UIImage alloc] initWithData:imageData];

我发现的图片大小设置在这里:

   AVCaptureSession *session = [[AVCaptureSession alloc] init];  
   session.sessionPreset =AVCaptureSessionPresetMedium; //medium on my iphone4 is 640*480

但是这里只有少数设置可以设置为自定义尺寸。

如果可能,我想拍照片的宽高比为1:1,例如400x400像素(方形图片)。 看来instagram正在这样做(或者他们正在裁剪图像?)。

如何指定拍摄照片的大小为方形?我知道如何改变手机的尺寸,但如果拍摄的照片不是正方形,结果就不好了。

有什么想法吗?

2 个答案:

答案 0 :(得分:11)

您可能应该通过创建新的上下文来调整UIImage的大小。以下示例

.....
UIImage *image = [[UIImage alloc] initWithData:imageData];
UIImage *tempImage = nil;
CGSize targetSize = CGSizeMake(400,400);
UIGraphicsBeginImageContext(targetSize);

CGRect thumbnailRect = CGRectMake(0, 0, 0, 0);
thumbnailRect.origin = CGPointMake(0.0,0.0);
thumbnailRect.size.width  = targetSize.width;
thumbnailRect.size.height = targetSize.height;

[image drawInRect:thumbnailRect];

tempImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

// tmpImage is resized to 400x400

希望这有帮助!

答案 1 :(得分:0)

我找到了一个使用AVCaptureSession拍照的代码......这是“JJob”的一个很棒的教程,请参阅这篇关于AVCaptureSession的click on this link最佳教程,请阅读本网站的所有评论和以前的教程这对你有很大的帮助....你可以从here .... !!

下载一个可用的示例代码

谢谢!!