美文网首页
iOS 图片去除特定背景色,使背景透明

iOS 图片去除特定背景色,使背景透明

作者: 是夏目啊 | 来源:发表于2017-12-29 17:27 被阅读0次

    //去除图片的粉色背景

    - (UIImage*) imageToTransparent:(UIImage*) image
    
    {
        
        // 分配内存
        
        const int imageWidth = image.size.width;
        
        const int imageHeight = image.size.height;
        
        size_t bytesPerRow = imageWidth * 4;
        
        uint32_t* rgbImageBuf = (uint32_t*)malloc(bytesPerRow * imageHeight);
        
        
        
        // 创建context
        
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
        
        CGContextRef context = CGBitmapContextCreate(rgbImageBuf, imageWidth, imageHeight, 8, bytesPerRow, colorSpace,
                                                     
                                                     kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);
        
        CGContextDrawImage(context, CGRectMake(0, 0, imageWidth, imageHeight), image.CGImage);
     
        // 遍历像素
        
        int pixelNum = imageWidth * imageHeight;
        
        uint32_t* pCurPtr = rgbImageBuf;
        
        for (int i = 0; i < pixelNum; i++, pCurPtr++)
            
        {
         
            //接近粉色
            
            //将像素点转成子节数组来表示---第一个表示透明度即ARGB这种表示方式。ptr[0]:透明度,ptr[1]:R,ptr[2]:G,ptr[3]:B
            
            //分别取出RGB值后。进行判断需不需要设成透明。
            
            uint8_t* ptr = (uint8_t*)pCurPtr;
            // NSLog(@"1是%d,2是%d,3是%d",ptr[1],ptr[2],ptr[3]);
            if(ptr[1] >= 200 || ptr[2] >= 200 || ptr[3] >= 200){
                 ptr[0] = 0;
            }
    
            
        }
        
        // 将内存转成image
        
        CGDataProviderRef dataProvider =CGDataProviderCreateWithData(NULL, rgbImageBuf, bytesPerRow * imageHeight, nil);
        
        
        
        CGImageRef imageRef = CGImageCreate(imageWidth, imageHeight,8, 32, bytesPerRow, colorSpace,
                                            
                                            kCGImageAlphaLast |kCGBitmapByteOrder32Little, dataProvider,
                                            
                                            NULL, true,kCGRenderingIntentDefault);
        
        
        CGDataProviderRelease(dataProvider);
        
        UIImage* resultUIImage = [UIImage imageWithCGImage:imageRef];
        
        // 释放
        
        CGImageRelease(imageRef);
        
        CGContextRelease(context);
        
        CGColorSpaceRelease(colorSpace);
        
        return resultUIImage;
        
    }
    

    相关文章

      网友评论

          本文标题:iOS 图片去除特定背景色,使背景透明

          本文链接:https://www.haomeiwen.com/subject/xrcwgxtx.html