AVAssetImageGenerator 生成的图像颜色略有错误,但仅限于 iOS 13.X

Aug*_*erg 8 swift

似乎 AVAssetImageGenerator().copyCGImage 在 iOS 13.x 上生成的图像颜色略有错误。颜色在 iOS 12.4 上是正确的。

有没有其他人经历过这种情况?


它看起来像什么

1 = AVPlayer(正确颜色)

2 = AVAssetImageGenerator 结果

请注意背景颜色略有不同。

在此处输入图片说明


代码

extension AVPlayer{
    var poster: UIImage? {
        guard let asset = self.currentItem?.asset else {
            return nil
        }

        let videoFrameCGImage = try! AVAssetImageGenerator(asset: asset).copyCGImage(at: CMTimeMake(value: 1, timescale: 10), actualTime: nil)

        return UIImage(cgImage: videoFrameCGImage)
    }
}
Run Code Online (Sandbox Code Playgroud)

ada*_*ulf 7

我在生成缩略图时遇到了同样的问题,上面 Pranav 的评论是我需要的提示。将输出复制CGImage到设备 RGB 色彩空间对我来说很有效:

generator.appliesPreferredTrackTransform = true
let thumbTime = CMTimeMakeWithSeconds(0, preferredTimescale: 30)
generator.maximumSize = maxSize ?? CGSize(width: 100, height: 100)
var cgImage = try? generator.copyCGImage(at: thumbTime, actualTime: nil)

// This was the missing line - correct the color space
cgImage = cgImage?.copy(colorSpace: CGColorSpaceCreateDeviceRGB())

if let cgImage = cgImage {
     return UIImage(cgImage: cgImage)
}
Run Code Online (Sandbox Code Playgroud)

这改变了cgImage.colorSpace使用:

<CGColorSpace 0x28248f660> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; HDTV)
Run Code Online (Sandbox Code Playgroud)

使用:

<CGColorSpace 0x282484120> (kCGColorSpaceDeviceRGB)
Run Code Online (Sandbox Code Playgroud)