2012-06-07 8 views
9

sto prendendo foto con AVFoundation come qui: http://red-glasses.com/index.php/tutorials/ios4-take-photos-with-live-video-preview-using-avfoundation/Come scattare foto quadrate in iphone con avFoundation come nell'app Instagram?

Un frammento:

[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]; 

Dimensione immagine per quanto ho scoperto è impostato qui:

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

Ma qui sono solo poche impostazioni possibili e non può essere impostato su misura personalizzata.

Mi piacerebbe che le immagini scattate abbiano proporzioni 1: 1 se possibile, ad esempio 400x400 pixel (immagini quadrate). Sembra che instagram lo stia facendo (o stanno ritagliando le immagini?).

Come si può specificare la dimensione dell'immagine scattata come quadrata? So come cambiare le dimensioni sul telefono, ma se l'immagine scattata non è quadrata, il risultato non è buono.

Qualche idea?

risposta

11

Probabilmente dovresti ridimensionare la tua UIImage creando un nuovo contesto. Esempi sotto

..... 
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 

Spero che questo aiuti!

+0

È questo l'unico modo? Immagino che l'immagine sembrerebbe peggio se fosse ridimensionata. È possibile fotografare la dimensione personalizzata e non ridimensionarla? – DixieFlatline

+0

nessuna fotocamera può scattare foto di dimensioni diverse. Userà sempre la piena risoluzione e ridimensionerà se si utilizzano immagini più piccole. Anche Instagram non ha altre possibilità che ritagliare un retto dall'immagine completa. In questo esempio la dimensione è '400px' ma puoi vedere quanto è ampia l'immagine originale e creare un rect con le stesse dimensioni in altezza. Risulterà in un'immagine quadrata e perderai alcuni pixel sopra e sotto. –

+0

Ridimensionare un'immagine, assumendo un'interpolazione decente, fa sembrare il testo migliore, quindi le tue paure sono infondate. – podperson

0

Ho trovato un codice per scattare una foto usando AVCaptureSession ... e questo è un ottimo tutorial di "JJob" vedi questo click on this link miglior tutorial su AVCaptureSession e per favore leggi tutti i commenti e le esercitazioni precedenti di questo sito questo aiuterà molto .... puoi scaricare un codice campione funzionante dal here .... !!

Grazie !!

+3

questa risposta è così abbozzata ... –

+1

Risposta fantastica, grazie - link inestimabili – Fattie

Problemi correlati