iOS 修改照片底色

2017-07-26  本文已影响97人  70岁了还要浪

今天突然有个老同学(美女)让我帮她修改一下照片底色,蓝底变白底,然后下了一个美图秀秀修改了半天还是不理想,于是觉得自己写一个demo来修改照片底色。

- (void)drawImage
{
    CGImageRef cgimage = [self.imageView.image CGImage];
    
    size_t width = CGImageGetWidth(cgimage); // 图片宽度
    size_t height = CGImageGetHeight(cgimage); // 图片高度
    unsigned char *data = calloc(width * height * 4, sizeof(unsigned char)); // 取图片首地址
    size_t bitsPerComponent = 8; // r g b a 每个component bits数目
    size_t bytesPerRow = width * 4; // 一张图片每行字节数目 (每个像素点包含r g b a 四个字节)
    CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); // 创建rgb颜色空间
    
    CGContextRef context =
    CGBitmapContextCreate(data,
                          width,
                          height,
                          bitsPerComponent,
                          bytesPerRow,
                          space,
                          kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
    CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgimage);
    
    for (size_t i = 10; i < height; i++)
    {
        for (size_t j = 10; j < width; j++)
        {
            size_t pixelIndex = i * width * 4 + j * 4;
            
            unsigned char red = data[pixelIndex];
            unsigned char green = data[pixelIndex + 1];
            unsigned char blue = data[pixelIndex + 2];
            
            //过滤代码
            if ((red < 0x2f && red> 0x07) && (green < 0xa0 && green> 0x84) && (blue < 0xbf && blue> 0xa8)) {
                //设置成白色
                data[pixelIndex] = 255;
                data[pixelIndex + 1] = 255;
                data[pixelIndex + 2] = 255;
            }
        }
    }
    
    cgimage = CGBitmapContextCreateImage(context);
    self.imageView.image = [UIImage imageWithCGImage:cgimage];
}
屏幕快照 2017-07-26 下午8.05.38.png 屏幕快照 2017-07-26 下午8.05.50.png

处理的效果一般,有些像素点没能过滤掉。

demo

上一篇下一篇

猜你喜欢

热点阅读