2014-01-16 4 views
1

У меня есть простая система захвата фотографий для захвата профиля в приложении IOS, все отлично работает, кроме как я не понимаю, как ограничить пропорции изображения в соответствии с Рамка изображения профиля 120px x 120px.IOS - UIImagePickerController - Ограничить пропорции изображения

Может ли кто-нибудь предложить какие-либо предложения?

UIView выглядит следующим образом - enter image description here

Мой код выглядит следующим образом -

- (IBAction)takePhoto:(id)sender { 
    if ([UIImagePickerController isSourceTypeAvailable: 
    UIImagePickerControllerSourceTypeCamera]) 
    { 
    UIImagePickerController *imagePicker = 
    [[UIImagePickerController alloc] init]; 
    imagePicker.delegate = self; 
    imagePicker.sourceType = 
    UIImagePickerControllerSourceTypeCamera; 
    imagePicker.mediaTypes = @[(NSString *) kUTTypeImage]; 
    imagePicker.allowsEditing = NO; 
    [self presentViewController:imagePicker 
         animated:YES completion:nil]; 
    _newMedia = YES; 
    } 


} 

- (IBAction)editPicBtn:(id)sender { 
    [_cameraPanel setHidden:NO]; 


} 

-(void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    NSString *mediaType = info[UIImagePickerControllerMediaType]; 

    [self dismissViewControllerAnimated:YES completion:nil]; 

    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { 
    UIImage *image = info[UIImagePickerControllerOriginalImage]; 

    _photoSquare.image = image; 

    if (_newMedia) 
     UIImageWriteToSavedPhotosAlbum(image, 
             self, 

               @selector(image:finishedSavingWithError:contextInfo:), 
             nil); 
} 
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) 
{ 
    // Code here to support video if enabled 
} 
[_cameraPanel setHidden:YES]; 

} 

-(void)image:(UIImage *)image 
finishedSavingWithError:(NSError *)error 
contextInfo:(void *)contextInfo 
{ 
    if (error) { 
     UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle: @"Save failed" 
          message: @"Failed to save image" 
          delegate: nil 
          cancelButtonTitle:@"OK" 
          otherButtonTitles:nil]; 
     [alert show]; 
} 
} 

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

- (IBAction)useCameraRoll:(id)sender { 
    if ([UIImagePickerController isSourceTypeAvailable: 
    UIImagePickerControllerSourceTypeSavedPhotosAlbum]) 
    { 
    UIImagePickerController *imagePicker = 
    [[UIImagePickerController alloc] init]; 
    imagePicker.delegate = self; 
    imagePicker.sourceType = 
    UIImagePickerControllerSourceTypePhotoLibrary; 
    imagePicker.mediaTypes = @[(NSString *) kUTTypeImage]; 
    imagePicker.allowsEditing = NO; 
    [self presentViewController:imagePicker 
         animated:YES completion:nil]; 
    _newMedia = NO; 
    } 



} 

ответ

2

При выборе изображения с камеры ролл, есть возможность масштабирования/позицию изображения таким образом, чтобы пользователь может сделать квадратную обрезку существующей фотографии. Затем вы можете изменить размер квадратного изображения на желаемое изображение размером 120x120 пикселей. Я не уверен, что этот вариант доступен также для недавно сделанных фотографий, но я бы догадался.

Если стандартного инструмента обрезки Apple недостаточно, вы всегда можете реализовать свой собственный. И это то, что я сделал.

// Hides the controls for moving & scaling pictures, or for 
// trimming movies. To instead show the controls, use YES. 
imagePicker.allowsEditing = YES; 

Кроппера возвращает квадрат изображение 640x640 пикселей, так чтобы изменить размер изображения до 120x120 пикселей вы можете сделать:

- (UIImage *)resizeImage:(UIImage *)image 
{ 
    CGRect rect = CGRectMake(0.0, 0.0, 240.0, 240.0); // 240.0 rather then 120.0 for retina 
    UIGraphicsBeginImageContext(rect.size); 
    [image drawInRect:rect]; 
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return img; 
} 
+0

Спасибо за вашу помощь Martin - редактор работает отлично и ограничивает изображение в квадрат пропорции на рулоне камеры - но выкалывает изображение для камеры в реальном времени .. – Dancer

+0

Что вы подразумеваете под сквошем изображение ..? Я попробовал это сам, и он работает нормально. AllowEditing = YES было достаточно, чтобы представить обрезку как для UIImagePickerControllerSourceTypeCamera, так и для UTImagePickerControllerSourceTypePhotoLibrary sourceTypes, и оба изображения были обрезаны на квадраты в моем случае. –

Смежные вопросы