0

这是 Xcode Playground 的复制代码:

import UIKit
import AVFoundation

let f = UIGraphicsImageRendererFormat()
f.scale = 1.0

let size = CGSize(width: 50, height: 1)
let image = UIGraphicsImageRenderer(size: size, format: f).image { rendererContext in
    UIColor.green.setFill()
    rendererContext.fill(CGRect(origin: .zero, size: size))
}

let tempDirURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
var tempFileURL = tempDirURL.appendingPathComponent(UUID().uuidString)
tempFileURL = tempFileURL.appendingPathExtension("heic")

guard let imageDestination = CGImageDestinationCreateWithURL(tempFileURL as CFURL, AVFileType.heic as CFString, 1, nil)
    else { fatalError("unable to create CGImageDestination") }

CGImageDestinationAddImage(imageDestination, image.cgImage!, nil)

let result = CGImageDestinationFinalize(imageDestination)
print(result)

如果宽度或高度为 1px,则CGImageDestinationFinalize返回 false 并且不创建文件。

如果高度和宽度至少为 2px,则图像保存时不会出错。

如果我使用 CIImage 方法保存,也会存在同样的问题。

4

0 回答 0