这是 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 方法保存,也会存在同样的问题。