- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很喜欢使用来自 UIGraphicsImageRenderer
的新 API自 iOS 10 以来引入,但现在我想知道是否有可能获得灰度 Data
来自其 pngData
方法。
假设我有一个名为“mask.png”的输入图像,一个灰度图像。我已经通过查看 UIImage
验证它加载为灰度的底层色彩空间。较旧的 API UIImagePNGRepresentation
似乎能够检测颜色空间并对其返回的 Data
进行编码适本地。然而,pngData
自 iOS 10 以来引入的功能似乎可以转换我的 Data
到 RGB 色彩空间。
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)
这是(简化的)输出:
...kCGColorSpaceModelMonochrome; Dot Gain 20%))")
...kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Dot Gain 20%))")
...kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1))")
我不知道如何在较新的 API 中设置色彩空间。是否可以使用新 API 保存灰度图像?
最佳答案
从 iOS 12 开始,UIGraphicsImageRender
将根据执行的绘图自动选择正确的色彩空间。在我的例子中,它自动创建了具有灰度色彩空间的图像。
<CGColorSpace 0x280d869a0> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile)
这在 iOS Memory Deep Dive 中进行了解释2018 年 WWDC session 。
无法使用此 API 手动指定颜色空间。然而,与此相关的是,您可以在 UIGraphicsImageRendererFormat
上设置 preferredRange
,但是没有首选单色的选项。
关于ios - UIGraphicsImageRenderer : pngData for grayscale image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48475937/
我很喜欢使用来自 UIGraphicsImageRenderer 的新 API自 iOS 10 以来引入,但现在我想知道是否有可能获得灰度 Data来自其 pngData方法。 假设我有一个名为“ma
我试图根据此文档使用Apple的UIKit框架的UIImage类的pngData()实例方法: https://developer.apple.com/documentation/uikit/uiim
我正在尝试快速屏蔽图像。这是我的代码: (通常,originalImg 是从 UIImagePickerController 加载的图像,然后由 UIGraphicsGetImageFromCurre
这个问题在这里已经有了答案: Swift PNG Image being saved with incorrect orientation (3 个回答) 1年前关闭。 我正在学习如何使用 UIIma
我有一个从相机拍摄的 UIImage。 我想做一些图像处理,所以我将它转换为 CIImage。 CIImage *ciImage = [CIImage imageWithCGImage:snapped
我是一名优秀的程序员,十分优秀!