Swift PNG 是一个无需 Foundation 框架、跨平台的框架,用于解码、检查、编辑和编码 PNG 图像。该框架完全使用 Swift 编写,可以在所有 Swift 平台上编译并提供一致的行为。该库还在 Linux、macOS 和 Windows 上提供内置的文件系统支持。
该库由原生 Swift DEFLATE 实现驱动,可以作为一个 独立模块 使用。
Swift PNG 在 Apache 2.0 许可证 下可用。 示例程序 是公共领域,可以自由修改。
Swift PNG 的文档可在 Swiftinit 上查阅!
swift-png 库需要 Swift 5.10 或更高版本。
平台 | 状态 |
---|---|
🐧 Linux | |
🍏 Darwin | |
🍏 Darwin (iOS) | |
🍏 Darwin (tvOS) | |
🍏 Darwin (visionOS) | |
🍏 Darwin (watchOS) |
要在项目中使用 Swift PNG,请将此描述符添加到 Package.swift
文件中的 dependencies
列表中
.package(url: "https://github.com/tayloraswift/swift-png", .from("4.4.0"))
解码图像
import PNG
func decode(png path:String) throws
{
guard
let image:PNG.Image = try .decompress(path: path)
else
{
// failed to access file from file system
}
let rgba:[PNG.RGBA<UInt8>] = image.unpack(as: PNG.RGBA<UInt8>.self),
size:(x:Int, y:Int) = image.size
// ...
}
编码图像
func encode(png path:String, size:(x:Int, y:Int), pixels:[PNG.RGBA<UInt8>]) throws
{
let image:PNG.Image = .init(packing: pixels, size: size,
layout: .init(format: .rgba8(palette: [], fill: nil)))
try image.compress(path: path, level: 9)
}
强大的接口。 Swift PNG 具有表现力强、强类型的 API,使初学者和高级用户都能轻松处理 PNG 图像。如果你的代码可以编译,那么你已经完成了一大半。高级用户可以利用 自定义索引、手动解码工作流程 和 用户定义的颜色目标。
卓越的压缩性能。 Swift PNG 支持基于最小成本路径的 DEFLATE 优化,因此它提供的压缩级别比 libpng 多出四个级别。
有竞争力的性能。 与 libpng 相比,Swift PNG 提供了有竞争力的性能。在适当的 CPU 架构上,Swift PNG 编码器利用 硬件加速哈希表 以获得更高的性能。
纯 Swift,从头到尾。 Swift PNG 由其自身的原生 Swift DEFLATE 实现驱动。它仅依赖于其他无需 Foundation 框架的纯 Swift 库,因此不需要链接 Foundation。这也意味着 Swift PNG 的核心组件可以在 Swift 本身可以运行的任何平台上工作,并且随着 Swift 编译器的成熟,Swift PNG 的性能也会提高。
开箱即用。 Swift PNG 带有 内置的颜色目标,并支持 预乘 Alpha。卷积和 反卷积 辅助函数使实现自定义颜色目标变得轻而易举。
一流的 iPhone 优化支持。 Swift PNG 无需自定义设置或第三方插件即可处理 iPhone 优化的 PNG 图像。iPhone 优化的图像在所有平台上都能正常工作。使用 位宽感知的 Alpha 预乘重现 pngcrush
的输出,以便在应用程序堆栈中的任何位置实现无缝集成。
全面的元数据支持。 Swift PNG 可以解析和验证所有公共 PNG 数据块,这些数据块可以作为 强类型元数据记录 访问。
现代化的错误处理。 Swift PNG 具有完全无状态且 Swift 原生的 错误处理系统。