2012-06-07 27 views
9

Tôi đang chụp ảnh với AVFoundation như ở đây: http://red-glasses.com/index.php/tutorials/ios4-take-photos-with-live-video-preview-using-avfoundation/Làm thế nào để chụp ảnh vuông trong iphone với avFoundation như trong ứng dụng Instagram?

Một đoạn:

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

Ảnh kích thước như xa như tôi phát hiện ra được thiết lập ở đây:

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

Nhưng đây chỉ vài cài đặt có thể và không thể được đặt thành kích thước tùy chỉnh.

Tôi muốn chụp ảnh để có tỷ lệ khung hình 1: 1 nếu có thể, ví dụ: 400x400 pixel (hình vuông). Có vẻ như instagram đang làm việc đó (hoặc là họ cắt ảnh?).

Làm cách nào tôi có thể chỉ định kích thước của ảnh được chụp là hình vuông? Tôi biết làm thế nào để thay đổi kích thước trên điện thoại, nhưng nếu hình ảnh được chụp không phải là hình vuông, kết quả là không tốt.

Bất kỳ ý tưởng nào?

Trả lời

11

Có thể bạn nên thay đổi kích thước UIImage bằng cách tạo ngữ cảnh mới. Ví dụ bên dưới

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

Hy vọng điều này sẽ hữu ích!

+0

Đây có phải là cách duy nhất không? Tôi đoán hình ảnh sẽ tồi tệ hơn nếu nó đã được thay đổi kích thước. Có thể chụp ảnh kích thước tùy chỉnh và không thay đổi kích thước không? – DixieFlatline

+0

không phải một máy ảnh duy nhất có thể chụp ảnh ở các kích thước khác nhau. Nó sẽ luôn luôn sử dụng độ phân giải đầy đủ và kích thước nó xuống nếu bạn sử dụng hình ảnh nhỏ hơn. Instagram cũng không có khả năng nào khác ngoài việc cắt xén một hình ảnh đầy đủ. Trong ví dụ này, kích thước là '400px' nhưng bạn có thể thấy độ rộng của hình ảnh ban đầu và tạo một hình chữ nhật có cùng kích thước với chiều cao. Nó sẽ tạo ra một hình vuông và bạn mất một số điểm ảnh trên và dưới. –

+0

Chia tỷ lệ hình ảnh xuống, giả sử nội suy phong nha, làm cho nó trông _better_ không tệ hơn, vì vậy nỗi sợ của bạn không có cơ sở. – podperson

0

Tôi đã tìm thấy một mã để chụp ảnh bằng AVCaptureSession ... và đây là hướng dẫn tuyệt vời của "JJob", xem hướng dẫn tốt nhất về AVCaptureSession và vui lòng đọc tất cả các bình luận và hướng dẫn trước của trang này. bạn rất nhiều .... bạn có thể tải về một mã mẫu làm việc từ here .... !!

Cảm ơn bạn !!

+3

câu trả lời này rất sơ sài ... –

+1

Câu trả lời tuyệt vời, cảm ơn - liên kết vô giá – Fattie

Các vấn đề liên quan