iOS 除去圖片的白色背景(接近白色),或者其它顏色的替換,獲取像素點的ARGB值


iOS 除去圖片的白色背景(接近白色),或者其它顏色的替換

方法如下:

//去除圖片的白色背景

+ (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++)

    {

//        //去除白色...將0xFFFFFF00換成其它顏色也可以替換其他顏色。

//        if ((*pCurPtr & 0xFFFFFF00) >= 0xffffff00) {

//            

//            uint8_t* ptr = (uint8_t*)pCurPtr;

//            ptr[0] = 0;

//        }

        //接近白色

        //將像素點轉成子節數組來表示---第一個表示透明度即ARGB這種表示方式。ptr[0]:透明度,ptr[1]:R,ptr[2]:G,ptr[3]:B

        //分別取出RGB值后。進行判斷需不需要設成透明。

        uint8_t* ptr = (uint8_t*)pCurPtr;

        if (ptr[1] > 240 && ptr[2] > 240 && ptr[3] > 240) {

            //當RGB值都大於240則比較接近白色的都將透明度設為0.-----即接近白色的都設置為透明。某些白色背景具有雜質就會去不干凈,用這個方法可以去干凈

            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;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM