Как выполнить квадратную обрезку фотографий в фотопленке?

Я хотел бы попробовать некоторые функции фильтра изображений на iPhone, как это делает Instagram. Я использую imagePickerController, чтобы получить фото с камеры. Я понимаю, что изображение, возвращаемое imagePickerController, было уменьшено для экономии памяти. И нецелесообразно загружать исходное изображение в UIImage. Но как я могу обработать изображение, а затем сохранить его в исходных пикселях? Я использую iPhone 4S в качестве устройства для разработки.

Исходное фото в фотопленке — 3264 *2448.

Изображение, возвращаемое UIImagePickerControllerOriginalImage, равно 1920 *1440

. Изображение, возвращаемое UIImagePickerControllerEditedImage, равно 640 *640

. imageViewOld (используйте UIImagePickerControllerCropRect [80,216,1280,1280], чтобы обрезать изображение, возвращаемое UIImagePickerControllerOriginalImage ), равно 1280 *1224

imageViewNew (используйте UIImagePickerControllerCropRect [80,216,2560,2560] двойного размера, чтобы обрезать изображение, возвращаемое UIImagePickerControllerOriginalImage )равно 1840 *1224.

Я проверяю ту же фотографию в инстаграме 1280 *1280

Мои вопросы:

  1. Почему UIImagePickerControllerOriginalImage не возвращает «исходное» фото? Почему сократили его до 1920 *1440?
  2. Почему UIImagePickerControllerEditedImage не возвращает изображение к 1280 *1280? Как
    UIImagePickerControllerCropRect показывает, что он обрезан на 1280 *1280 квадратов?

  3. Как я могу сделать квадратную обрезку исходной фотографии, чтобы получить изображение 2448 *2448?

Заранее спасибо. Ниже мой код:

  - (void)imagePickerController:(UIImagePickerController *)picker  didFinishPickingMediaWithInfo:(NSDictionary *)info
  {

   NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
   if ([mediaType isEqualToString:@"public.image"])
   {

    UIImage *imageEdited = [info objectForKey:UIImagePickerControllerEditedImage];
    UIImage *imagePicked = [info objectForKey:UIImagePickerControllerOriginalImage];

    CGRect cropRect;
    cropRect = [[info valueForKey:@"UIImagePickerControllerCropRect"] CGRectValue];

    NSLog(@"Original width = %f height= %f ",imagePicked.size.width, imagePicked.size.height);
    //Original width = 1440.000000 height= 1920.000000

    NSLog(@"imageEdited width = %f height = %f",imageEdited.size.width, imageEdited.size.height);
    //imageEdited width = 640.000000 height = 640.000000

    NSLog(@"corpRect %f %f %f %f", cropRect.origin.x, cropRect.origin.y, cropRect.size.width, cropRect.size.height);
    //corpRect 80.000000 216.000000 1280.000000 1280.000000

    CGRect rectNew = CGRectMake(cropRect.origin.x, cropRect.origin.y, cropRect.size.width*2, cropRect.size.height*2);

    CGRect rectOld = CGRectMake(cropRect.origin.x, cropRect.origin.y, cropRect.size.width, cropRect.size.height);

    CGImageRef imageRefNew = CGImageCreateWithImageInRect([imagePicked CGImage], rectNew);
    CGImageRef imageRefOld = CGImageCreateWithImageInRect([imagePicked CGImage], rectOld);

    UIImageView *imageViewNew = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:imageRefNew]];
    CGImageRelease(imageRefNew);

    UIImageView *imageViewOld = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:imageRefOld]];
    CGImageRelease(imageRefOld);


    NSLog(@"imageViewNew width = %f height = %f",imageViewNew.image.size.width, imageViewNew.image.size.height);
    //imageViewNew width = 1840.000000 height = 1224.000000

    NSLog(@"imageViewOld width = %f height = %f",imageViewOld.image.size.width, imageViewOld.image.size.height);
    //imageViewOld width = 1280.000000 height = 1224.000000

     UIImageWriteToSavedPhotosAlbum(imageEdited, nil, nil, NULL);

     UIImageWriteToSavedPhotosAlbum([imageViewNew.image imageRotatedByDegrees:90.0], nil, nil, NULL);
     UIImageWriteToSavedPhotosAlbum([imageViewOld.image imageRotatedByDegrees:90.0], nil, nil, NULL);


    //assign the image to an UIImage Control
    self.imageV.contentMode = UIViewContentModeScaleAspectFit;
    self.imageV.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.width);
    self.imageV.image = imageEdited;


  }

  [self dismissModalViewControllerAnimated:YES];

 }
8
задан Vimal Venugopalan 27 January 2014 в 12:47
поделиться