2

我有一个具有白色背景的 UIImage(由用户绘图生成)。我想让这张图片的白色部分透明。我还想将其保存为 PNG 文件。

我在论坛上环顾四周,但无法弄清楚如何正确掩盖图像。有没有人试过这个?

谢谢。

4

4 回答 4

3

尝试这样的事情......

CGImageRef myMaskedImage = [myImage CGImage];
const float whiteMask[6] = { 255,255,255, 255,255,255 };
CGImageRef myColorMaskedImage = CGImageCreateWithMaskingColors(image, whiteMask);

CGDataProviderRef provider;
CGImageRef myPngImage = CGImageCreateWithPNGDataProvider(provider, NULL, true, kCGRenderingIntentDefault);

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt: 72], kCGImagePropertyDPIHeight, [NSNumber numberWithInt: 72], kCGImagePropertyDPIWidth, nil];
CGImageDestinationRef destRef = CGImageDestinationCreateWithURL ((CFURLRef)outPath, (CFStringRef)@"image.png" , 1, NULL);
CGImageDestinationAddImage(destRef, myPngImage, (CFDictionaryRef)options);
CGImageDestinationFinalize(destRef);
CGRelease(destRef);

CGImageRelease(myColorMaskedImage);
CGImageRelease(myPngImage);

来自相当冗长的Quartz2d Programming Guide这个邮件列表消息

于 2009-09-01T18:44:39.427 回答
0

您将不得不获取原始数据,查找白色像素,修改这些像素的 alpha 并保存到新的 NSData 对象,然后将其转换为 PNG。

这并不难,但我不会说它微不足道。

于 2009-07-10T20:32:06.990 回答
0

您可以尝试使起始 UIImage 完全透明,然后在其后面放置另一个完全白色的 UIImageView。

于 2009-07-10T07:56:38.153 回答
0

你可以试试这个

extension UIImage {
    func imageByMakingWhiteBackgroundTransparent() -> UIImage? {

        let image = UIImage(data: self.jpegData(compressionQuality: 1.0)!)!
        let rawImageRef: CGImage = image.cgImage!

        let colorMasking: [CGFloat] = [222, 255, 222, 255, 222, 255]
        UIGraphicsBeginImageContext(image.size);

        let maskedImageRef = rawImageRef.copy(maskingColorComponents: colorMasking)
        UIGraphicsGetCurrentContext()?.translateBy(x: 0.0,y: image.size.height)
        UIGraphicsGetCurrentContext()?.scaleBy(x: 1.0, y: -1.0)
        UIGraphicsGetCurrentContext()?.draw(maskedImageRef!, in: CGRect.init(x: 0, y: 0, width: image.size.width, height: image.size.height))
        let result = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return result

    }

}
于 2020-01-22T11:49:56.410 回答