首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIGraphicsImageRenderer:灰度图像的pngData

UIGraphicsImageRenderer:灰度图像的pngData
EN

Stack Overflow用户
提问于 2018-01-27 20:45:07
回答 1查看 880关注 0票数 1

我喜欢使用从iOS 10开始引入的UIGraphicsImageRenderer更新的Data,但现在我想知道是否有可能从它的pngData方法中获得灰度API。

假设我有一个叫做"mask.png“的输入图像,这是一个灰度图像。我已经通过查看UIImage的底层色彩空间验证了它是否加载为灰度级。较旧的UIImagePNGRepresentation接口似乎能够检测色彩空间并正确编码其返回的Data。然而,从iOS 10开始引入的pngData函数似乎将我的Data转换为RGB色彩空间。

代码语言:javascript
复制
extension UIImage {
    public func pngData_olderAPI() -> Data? {
        return UIImagePNGRepresentation(self)
    }

    public func pngData() -> Data {
        let renderedSize = CGSize(width: size.width, height: size.height)
        let renderer = UIGraphicsImageRenderer(size: renderedSize, format: UIGraphicsImageRendererFormat())
        return renderer.pngData { (rendererContext) in
            let rect = CGRect(x: 0, y: 0, width: renderedSize.width, height: renderedSize.height)
            self.draw(in: rect)
        }
    }
}

let mask = UIImage(named: "mask.png")
print(mask?.cgImage?.colorSpace.debugDescription)

let data = mask?.pngData_olderAPI()
let unwrappedMask = UIImage(data: data!)
print(unwrappedMask?.cgImage?.colorSpace.debugDescription)

let data2 = mask?.pngData()
let unwrappedMask2 = UIImage(data: data2!)
print(unwrappedMask2?.cgImage?.colorSpace.debugDescription)

下面是(简化的)输出:

代码语言:javascript
复制
...kCGColorSpaceModelMonochrome; Dot Gain 20%))")
...kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Dot Gain 20%))")
...kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1))")

我不知道如何在新的API中设置色彩空间。有没有可能用新的API保存灰度图像?

EN

回答 1

Stack Overflow用户

发布于 2018-08-26 11:13:38

从iOS 12开始,UIGraphicsImageRender将根据执行的绘图自动选择正确的颜色空间。在我的例子中,它自动创建了灰度颜色空间的图像。

代码语言:javascript
复制
<CGColorSpace 0x280d869a0> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile)

这在2018年全球数据中心的iOS Memory Deep Dive会议上得到了解释。

没有办法使用此API手动指定颜色空间。然而,与此相关的是,您可以在UIGraphicsImageRendererFormat上设置preferredRange,但没有首选单色的选项。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48475937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档