如何对具有透明像素的图像进行灰度化,使其全部不透明?
How to gray scale an image with transparent pixels making all of them opaque?
我正在使用我在 this post 中找到的这个函数将彩色图像转换为灰度图像:
func grayScaleImage() -> UIImage {
let imageRect = CGRectMake(0, 0, self.size.width, self.size.height);
let colorSpace = CGColorSpaceCreateDeviceGray();
let width = UInt(self.size.width)
let height = UInt(self.size.height)
let context = CGBitmapContextCreate(nil, width, height, 8, 0, colorSpace, .allZeros);
CGContextDrawImage(context, imageRect, self.CGImage!);
let imageRef = CGBitmapContextCreateImage(context);
let newImage = UIImage(CGImage: imageRef)
return newImage
}
我用一些透明背景的图片做了一些测试,我得到的结果是一张黑色背景的图片。我希望 transparent/translucent 像素表现得好像图像的背景是白色的,我该怎么做?
要使图像的透明部分变为白色(或任何其他颜色),只需在绘图上下文中绘制一个填充的矩形。
Swift 3:
extension UIImage {
func grayScaleImage() -> UIImage {
//let imageRect = CGRectMake(0, 0, self.size.width, self.size.height);
let imageRect = CGRect(origin: CGPoint.zero, size: self.size)
let colorSpace = CGColorSpaceCreateDeviceGray();
let width = Int(self.size.width)
let height = Int(self.size.height)
let context = CGContext(data: nil, width: width, height: height, bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: .allZeros)
// set Fill Color to White (or some other color)
context?.setFillColor(UIColor.white.cgColor)
// Draw a white-filled rectangle before drawing your image
context?.fill(imageRect)
context?.draw(self.cgImage!, in: imageRect)
let imageRef = context?.makeImage()
let newImage = UIImage(cgImage: imageRef!)
return newImage
}
}
Swift 2.2:
extension UIImage {
func grayScaleImage() -> UIImage {
let imageRect = CGRectMake(0, 0, self.size.width, self.size.height);
let colorSpace = CGColorSpaceCreateDeviceGray();
let width = Int(self.size.width)
let height = Int(self.size.height)
let context = CGBitmapContextCreate(nil, width, height, 8, 0, colorSpace, .allZeros);
// set Fill Color to White (or some other color)
CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor)
// Draw a white-filled rectangle before drawing your image
CGContextFillRect(context, imageRect)
CGContextDrawImage(context, imageRect, self.CGImage!);
let imageRef = CGBitmapContextCreateImage(context);
let newImage = UIImage(CGImage: imageRef!)
return newImage
}
}
我正在使用我在 this post 中找到的这个函数将彩色图像转换为灰度图像:
func grayScaleImage() -> UIImage {
let imageRect = CGRectMake(0, 0, self.size.width, self.size.height);
let colorSpace = CGColorSpaceCreateDeviceGray();
let width = UInt(self.size.width)
let height = UInt(self.size.height)
let context = CGBitmapContextCreate(nil, width, height, 8, 0, colorSpace, .allZeros);
CGContextDrawImage(context, imageRect, self.CGImage!);
let imageRef = CGBitmapContextCreateImage(context);
let newImage = UIImage(CGImage: imageRef)
return newImage
}
我用一些透明背景的图片做了一些测试,我得到的结果是一张黑色背景的图片。我希望 transparent/translucent 像素表现得好像图像的背景是白色的,我该怎么做?
要使图像的透明部分变为白色(或任何其他颜色),只需在绘图上下文中绘制一个填充的矩形。
Swift 3:
extension UIImage {
func grayScaleImage() -> UIImage {
//let imageRect = CGRectMake(0, 0, self.size.width, self.size.height);
let imageRect = CGRect(origin: CGPoint.zero, size: self.size)
let colorSpace = CGColorSpaceCreateDeviceGray();
let width = Int(self.size.width)
let height = Int(self.size.height)
let context = CGContext(data: nil, width: width, height: height, bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: .allZeros)
// set Fill Color to White (or some other color)
context?.setFillColor(UIColor.white.cgColor)
// Draw a white-filled rectangle before drawing your image
context?.fill(imageRect)
context?.draw(self.cgImage!, in: imageRect)
let imageRef = context?.makeImage()
let newImage = UIImage(cgImage: imageRef!)
return newImage
}
}
Swift 2.2:
extension UIImage {
func grayScaleImage() -> UIImage {
let imageRect = CGRectMake(0, 0, self.size.width, self.size.height);
let colorSpace = CGColorSpaceCreateDeviceGray();
let width = Int(self.size.width)
let height = Int(self.size.height)
let context = CGBitmapContextCreate(nil, width, height, 8, 0, colorSpace, .allZeros);
// set Fill Color to White (or some other color)
CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor)
// Draw a white-filled rectangle before drawing your image
CGContextFillRect(context, imageRect)
CGContextDrawImage(context, imageRect, self.CGImage!);
let imageRef = CGBitmapContextCreateImage(context);
let newImage = UIImage(CGImage: imageRef!)
return newImage
}
}