gpt4 book ai didi

ios - CIContext JPEG/PNG输出函数产生空白图像

转载 作者:行者123 更新时间:2023-12-01 16:12:24 25 4
gpt4 key购买 nike

我正在尝试将CIImage输出到磁盘,并正在寻找最有效的方法。我发现了this question,建议使用CIContext的writeJPEGRepresentation / writePNGRepresentation方法。但是,每当我尝试使用这些方法时,它们都会产生空白图像。

对于JPEG,它将产生纯黑色图像。 PNG产生纯透明图像。 HEIF方法还产生纯黑色图像。如果使用jpegRepresentationpngRepresentation方法生成Data,而不是直接写入磁盘,则结果相同。

如果我改为使用createCGImage渲染这些对象,然后从CGImage中写出数据,则它们看起来不错。

任何想法为什么会发生这种情况?

这是一个说明问题的简单示例:

let ciImage = CIImage(contentsOf: photoURL, options: [CIImageOption.applyOrientationProperty: true])!

let context = CIContext()
try! context.writeJPEGRepresentation(of: ciImage, to: FileManager.default.temporaryDirectory.appendingPathComponent("testFromCIImage.jpeg"), colorSpace: CGColorSpace(name: CGColorSpace.sRGB)!, options: [:])

let cgImage: CGImage = context.createCGImage(ciImage, from: ciImage.extent)!
let uiImage = UIImage(cgImage: cgImage)
try! uiImage.jpegData(compressionQuality: 1.0)!.write(to: FileManager.default.temporaryDirectory.appendingPathComponent("testFromUIImage.jpeg"))
testFromCIImage.jpeg显示为空白图像,其大小与原始输入图像相同。 testFromUIImage.jpeg看起来与输入图像相同。

我创建了一个说明问题的 sample project以及一些示例图像。

更新

我发现只有一种情况可以正确输出图像-当源图像为PNG且 colorSpacewriteJPEGRepresentation参数与源图像的色彩空间匹配时。即使色彩空间匹配,我也没有使用任何JPEG取得成功。

最佳答案

如您所说,这似乎是模拟器独有的问题。但是,我做了一些进一步的挖掘,发现了以下内容:

在检查Core Image的功能时(通过设置CI_PRINT_TREE环境变量),我发现树看起来很正常(尽管生成的图像是黑色的)。但是,对于工作配置,什么也没印刷!在我看来,Core Image实际上并没有进行任何渲染,但是Image I / O可能直接用于编写JPG。

这导致我尝试通过在上下文创建时传递CIContextOption.useSoftwareRenderer来强制Core Image使用软件渲染器(而不是其默认的Metal渲染器)。但是,这完全被忽略。结果上下文仍然是金属上下文...

是的,似乎唯一可行的解​​决方法是立即通过CGImage。如果您要向Apple提交错误,那就太好了。

关于ios - CIContext JPEG/PNG输出函数产生空白图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61552637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com