2012-06-07 9 views
9

http://red-glasses.com/index.php/tutorials/ios4-take-photos-with-live-video-preview-using-avfoundation/InstagramアプリのようにavFoundationでiphoneで正方形の画像を撮る方法は?私はここのように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が行っているようです(または画像を切り取っていますか?)。

撮影した画像のサイズを正方形にするにはどうすればよいですか?私は電話でサイズを変更する方法を知っていますが、撮影した画像が正方形でない場合、結果は良くありません。

答えて

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 

希望します。

+0

これが唯一の方法ですか?サイズが変更されていれば、イメージがさらに悪化すると思います。カスタムディメンションの写真を撮ってサイズを変更することはできますか? – DixieFlatline

+0

1台のカメラで異なる次元で写真を撮ることはできません。小さな画像を使用すると、常に完全な解像度が使用され、サイズが小さくなります。 Instagramには、完全な画像から四角形を切り取ること以外の方法もありません。この例では、サイズは '400px'ですが、元の画像の幅を知ることができ、高さが同じサイズのrectを作ることができます。正方形の画像が表示され、上下のピクセルが緩やかになります。 –

+0

画像を縮小すると、まともな補間を仮定すると、より悪くないように見えるので、恐怖は根拠がありません。 – podperson

0

私はAVCaptureSessionを使って写真を撮るためのコードを1つ見つけました。これは "JJob"の素晴らしいチュートリアルです。click on this link AVCaptureSessionに関するベストチュートリアルを参照してください。このサイトのすべてのコメントと以前のチュートリアルを読んでくださいあなたは多くの....あなたはhere ....から作業サンプルコードをダウンロードすることができます....

ありがとうございました!

+3

この回答はとてもスケッチです... –

+1

素晴らしい答え、貴重なリンク – Fattie

関連する問題