如何在iOS中将PNG图像转换为CMYK?

时间:2016-10-30 16:54:57

标签: ios colors uiimageview uiimage

我有一组用户生成的PNG图像,我需要将其嵌入到可打印的PDF中。印刷公司设定的约束之一是所有图像都在CMYK色彩空间中。如何将PNG(或包含该PNG的UIImage)转换为CMYK?默认情况下,颜色空间为sRGB。

2 个答案:

答案 0 :(得分:1)

您应该考虑CGColorSpace类和CGColorSpaceCreateDeviceCMYK函数。 您可以使用this初始化程序创建CGContex,并将CMYK颜色空间作为参数传递给它。然后从该上下文中绘制一个CGImage并从中创建UIImage。

示例:

func createCMYK(fromRGB image: UIImage) -> UIImage? {
    let size = image.size
    let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceCMYK()
    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
    guard let context = CGContext(data: nil,
                                  width: Int(size.width),
                                  height: Int(size.height),
                                  bitsPerComponent: 8,
                                  bytesPerRow: 4 * Int(size.width),
                                  space: colorSpace,
                                  bitmapInfo: bitmapInfo.rawValue) else { return nil }            
    context.draw(image.cgImage!, in: CGRect(origin: .zero, size: size))
    guard let cgImage = context.makeImage() else { return nil }
    return UIImage(cgImage: cgImage)
}

答案 1 :(得分:0)

根据https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203“支持的像素格式”表,您必须使用

    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.none.rawValue)

正确创建上下文