【问题标题】:How to remove UIImage Background color and make it transparent?如何删除 UIImage 背景颜色并使其透明?
【发布时间】: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。

标签: ios cocoa-touch uikit uiimage


【解决方案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 等图像编辑工具将背景颜色更改为透明。完成后,当您显示此图像时,您应该能够看到下面的图层或视图,只要您有透明区域。
猜你喜欢
  • 1970-01-01
  • 2011-12-23
  • 2017-03-15
  • 2016-06-24
  • 2011-12-06
  • 2017-02-27
  • 2020-01-13
  • 2021-09-13
  • 2017-05-22
相关资源
最近更新 更多