2017-01-21 1 views
0

Я пытаюсь получить обрезанное изображение с фотографии. У меня есть следующий код, обрезать изображение, которое получили от КСНА сталкивается SDK обнаружения:Выберите и обрезайте изображение лица с фотоизображения (ios)

- (UIImage *)scaleAndRotateImage:(CIFeature *)ciFeature image:(UIImage *)image { 
    static int kMaxResolution = 640; 

    CGImageRef imgRef = image.CGImage; 
    CGFloat width = CGImageGetWidth(imgRef); 
    CGFloat height = CGImageGetHeight(imgRef); 

    CGAffineTransform transform = CGAffineTransformIdentity; 
    CGRect bounds = CGRectMake(0, 0, width, height); 
    if (width > kMaxResolution || height > kMaxResolution) { 
     CGFloat ratio = width/height; 
     if (ratio > 1) { 
      bounds.size.width = kMaxResolution; 
      bounds.size.height = bounds.size.width/ratio; 
     } else { 
      bounds.size.height = kMaxResolution; 
      bounds.size.width = bounds.size.height * ratio; 
     } 
    } 

    CGFloat scaleRatio = bounds.size.width/width; 

    UIImageOrientation orient = image.imageOrientation; 
    switch(orient) { 
     case UIImageOrientationUp: 
      transform = CGAffineTransformIdentity; 
      break; 
       default: 
      [NSException raise:NSInternalInconsistencyException 
         format:@"Invalid image orientation"]; 
    } 

    UIGraphicsBeginImageContext(bounds.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) { 
     CGContextScaleCTM(context, -scaleRatio, scaleRatio); 
     CGContextTranslateCTM(context, -height, 0); 
    } else { 
     CGContextScaleCTM(context, scaleRatio, -scaleRatio); 
     CGContextTranslateCTM(context, 0, -height); 
    } 
    CGContextConcatCTM(context, transform); 
    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef); 
    UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return returnImage; 
} 

Но как я могу обрезать только лицо с изображения (как изображение лица в коробке), потому что на данный момент он изменяет исходное разрешение изображения ?

+0

@ Анитон Кашпор, вы имеете в виду обрезку к квадрату? – aircraft

+0

@aircraft да, я. –

+0

Вы хотите обрезать специальное положение или квадрат по умолчанию? – aircraft

ответ

0

Если вы хотите, чтобы обрезать изображение с более удобным и более определенным пользователем, я рекомендую вам использовать RSKImageCropper, его GitHub расположение здесь: https://github.com/ruslanskorb/RSKImageCropper

Потому что вы хотите обрезать позицию перед лицом, в так метод системы по умолчанию не удовлетворяет вашим требованиям, вы можете узнать здесь: https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/CameraAndPhotoLib_TopicsForIOS/Articles/PickinganItemfromthePhotoLibrary.html#//apple_ref/doc/uid/TP40010408-SW1

метод обрезать изображение Процессор Core Graphic в: CGImageCreateWithImageInRect, не так просто, чтобы подтвердить прямоугольник вы хотите, потому что вы для получения положения лица Вам необходимо сделайте много работы, RSKImageCropper может быть вашим удобным выбором.