从照片图像中选择和裁剪人脸图像(ios)

Posted

技术标签:

【中文标题】从照片图像中选择和裁剪人脸图像(ios)【英文标题】:Select and crop face image from photo image (ios) 【发布时间】:2017-01-21 12:21:58 【问题描述】:

我正在尝试从照片中获取裁剪的图像。我有以下代码可以裁剪从 ios 人脸检测 sdk 获得的图像:

- (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;

但是我如何才能从图像中只裁剪人脸(如框中的人脸图像),因为现在它改变了图像的原始分辨率?

【问题讨论】:

@Aniton Kashpor,你的意思是裁剪成方形图像吗? @aircraft 是的,我愿意。 您要裁剪特殊位置还是默认正方形? @aircraft 只有人脸所在的地方。 好的,我知道你的意思。如果这是你必须使用 3tr 库 【参考方案1】:

如果你想更方便、更自定义地裁剪图像,我推荐你使用 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 可能是你方便的选择。

【讨论】:

以上是关于从照片图像中选择和裁剪人脸图像(ios)的主要内容,如果未能解决你的问题,请参考以下文章

iOS 裁剪圆形图像并显示(类似于微信头像)

如何让用户选择在保存之前裁剪从相机拍摄的照片?

从 iPhone 的照片库中调整方形裁剪图像的正确方法而不会失真

如何在ios中删除照片的图像?

iPhone:如何使用 iPhone 照片应用程序等“编辑”功能从照片库或相机中获取图像

离子从相机中排除谷歌照片。PictureSourceType.PHOTOLIBRARY