如何删除 UIImage 背景颜色并使其透明?

Posted

技术标签:

【中文标题】如何删除 UIImage 背景颜色并使其透明?【英文标题】:How to remove UIImage Background color and make it transparent? 【发布时间】:2011-10-03 09:17:57 【问题描述】:

我想移除 UIImage 背景颜色并使其透明...

我试过了,但下面的代码只是将白色背景颜色更改为黑色。

   UIImage* createColorMaskedImage(UIImage* originalImage)
float maskingColors[6] = 0xEE, 0xFF, 0xEE, 0xFF, 0xEE, 0xFF;
CGImageRef maskedImageRef = CGImageCreateWithMaskingColors(originalImage.CGImage,     maskingColors);
UIImage* maskedImage = [UIImage imageWithCGImage:maskedImageRef];
CGImageRelease(maskedImageRef);
return maskedImage;



UIImage *watchImage = [UIImage imageNamed:@"watch2.jpg"];
// Mask image
colorMaskImage_ = createColorMaskedImage(watchImage);
//create image view and set its poistion.
UIImageView* maskImageView = [[UIImageView alloc] initWithImage:colorMaskImage_];
CGRect frame = maskImageView.frame;
frame.origin = CGPointMake(80,60);
maskImageView.frame = frame;
maskImageView.backgroundColor = [UIColor clearColor];
[self.view addSubview:maskImageView];
[maskImageView release];

【问题讨论】:

@ereilin:这个问题是关于 Cocoa Touch,而不是 Cocoa。 【参考方案1】:

斯威夫特版本

func makeTransparent(image: UIImage) -> UIImage? 
    guard let rawImage = image.cgImage else  return nil
    let colorMasking: [CGFloat] = [255, 255, 255, 255, 255, 255]
    UIGraphicsBeginImageContext(image.size)
    
    if let maskedImage = rawImage.copy(maskingColorComponents: colorMasking),
        let context = UIGraphicsGetCurrentContext() 
        context.translateBy(x: 0.0, y: image.size.height)
        context.scaleBy(x: 1.0, y: -1.0)
        context.draw(maskedImage, in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height))
        let finalImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return finalImage
    
    
    return nil

【讨论】:

太棒了,谢谢!!【参考方案2】:

您的 watch2.jpg 可能没有 alpha 值,这将使其具有透明区域。

【讨论】:

是图像没有 alpha 值。我怎样才能让它透明?你能建议我吗? 首先,您需要使用 GIF 或 PNG 而不是 JPEG - 标准 GPEG 仅存储 24 位 RGB。其次,您需要使用 Photoshop 等图像编辑工具将背景颜色更改为透明。完成后,当您显示此图像时,您应该能够看到下面的图层或视图,只要您有透明区域。

以上是关于如何删除 UIImage 背景颜色并使其透明?的主要内容,如果未能解决你的问题,请参考以下文章

如何将背景转换为透明? [关闭]

iPhone:UIImage 背景颜色与 UIView 背景颜色不同

如何让 ScrollView 半透明并使其背后的内容具有交互性?

更改 QTableWidget 默认选择颜色,并使其半透明

Javascript删除背景颜色和不透明度

如何在不使其全屏的情况下删除颤振闪屏状态栏的颜色覆盖?