iOS 图片去背景


- (UIImage *)removeBackgroudWithImage: (UIImage *)image{
    unsigned char *targetData = malloc(sizeof(unsigned char) * image.size.width *image.size.height *4);
    UIGraphicsBeginImageContext(image.size);
    [image drawInRect: CGRectMake(0, 0, image.size.width, image.size.height)];
    unsigned char *data = malloc(sizeof(unsigned char) * image.size.width *image.size.height *4);
    [self imageRGBABytesRef: &data FromImage: image];
    
    for (int i = 0; i < image.size.width *image.size.height *4; i += 4) {
        
        UIColor *pixleColor = [UIColor colorWithRed: data[i] / 255.0  green:data[i+1] / 255.0 blue:data[i + 2] / 255.0 alpha:data[i + 3] / 255.0];
        CGFloat c, m, y ,k, a;
        [pixleColor getCyan:&c magenta:&m yellow:&y black:&k alpha:&a];//YYKit中的类别方法
        targetData[i] = data[i];
        targetData[i + 1] = data[i + 1];
        targetData[i + 2] = data[i + 2];
        if (k < 0.4) {
            targetData[i + 3] = 0;
        }else{
            targetData[i + 3] = 255;
        }
    }
    UIImage *result = [self imageFromBRGABytes: targetData imageSize: image.size];
    free(targetData);
    
    return result;
}

- (UIImage *)imageFromBRGABytes:(unsigned char *)imageBytes imageSize:(CGSize)imageSize {
    CGImageRef imageRef = [self imageRefFromBGRABytes:imageBytes imageSize:imageSize];
    UIImage *image = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return image;
}

- (CGImageRef)imageRefFromBGRABytes:(unsigned char *)imageBytes imageSize:(CGSize)imageSize {
    
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(imageBytes,
                                                 imageSize.width,
                                                 imageSize.height,
                                                 8,
                                                 imageSize.width * 4,
                                                 colorSpace,
                                                kCGImageAlphaPremultipliedLast);
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    
    return imageRef;
}

- (void)imageRGBABytesRef:(unsigned char **)data FromImage: (UIImage *)image {
    unsigned char *targetData = malloc(sizeof(unsigned char) * image.size.width *image.size.height *4);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(targetData,
                                                 image.size.width,
                                                 image.size.height,
                                                 8,
                                                 image.size.width * 4,
                                                 colorSpace,
                                                 kCGImageAlphaPremultipliedLast);
    CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage);
    memcpy(*data, targetData, sizeof(unsigned char) * image.size.width *image.size.height *4);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值