2012-06-07 17 views
9

मैं यहाँ की तरह AVFoundation के साथ तस्वीर ले रहा हूँ: http://red-glasses.com/index.php/tutorials/ios4-take-photos-with-live-video-preview-using-avfoundation/Instagram ऐप में avfoundation के साथ iphone में स्क्वायर पिक्चर कैसे लें?

एक टुकड़ा:

[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 *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

कोई भी कैमरा अलग-अलग आयामों में चित्र नहीं ले सकता है। यदि आप छोटी छवियों का उपयोग करते हैं तो यह हमेशा पूर्ण रिज़ॉल्यूशन का उपयोग करेगा और इसे आकार देगा। इंस्टाग्राम की पूरी छवि से बाहर निकलने की तुलना में कोई अन्य संभावना नहीं है। इस उदाहरण में आकार '400px' है लेकिन आप देख सकते हैं कि मूल छवि कितनी व्यापक है और ऊंचाई में एक ही आकार का एक रेक्ट बनाते हैं। इसके परिणामस्वरूप एक स्क्वायर छवि होगी और आप ऊपर और नीचे कुछ पिक्सल खो देंगे। –

+0

एक छवि को स्केलिंग, सभ्य इंटरपोलेशन मानते हुए, इसे _better_ खराब नहीं दिखता है, इसलिए आपके डर निराधार हैं। – podperson

0

मुझे AVCaptureSession का उपयोग करके एक तस्वीर लेने के लिए एक कोड मिला है ... और यह "JJob" द्वारा एक महान ट्यूटोरियल है, यह click on this link AVCaptureSession के बारे में सबसे अच्छा ट्यूटोरियल देखें और कृपया इस साइट के सभी टिप्पणियां और पिछले ट्यूटोरियल पढ़ें आप बहुत कुछ .... आप here से एक काम कर रहे नमूना कोड डाउनलोड कर सकते हैं .... !!

धन्यवाद !!

+3

यह उत्तर इतना स्केची है ... –

+1

शानदार उत्तर, धन्यवाद - अनमोल लिंक – Fattie

संबंधित मुद्दे