The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
Swift PNG 4.0.1
16 weeks ago
Minor concurrency patch: Adds `Sendable` conformances to the built-in generic `RGBA<T>` and `VA<T>` types.
<strong><em>Swift PNG</em></strong> <br/> 4.0.0
- ***Powerful interfaces.*** *Swift PNG*’s expressive, strongly-typed APIs make working with PNG images easy for beginners and advanced users alike. If your code compiles, you’re already most of the way there. Power users can take advantage of [custom indexing](../../tree/master/examples/#using-indexed-images), [manual decoding workflows](../../tree/master/examples/#online-decoding), and [user-defined color targets](../../tree/master/examples/#custom-color-targets).
- ***Superior compression***. *Swift PNG* supports minimum cost path-based [*DEFLATE*](https://tools.ietf.org/html/rfc1951) optimization, which is why it offers four additional compression levels beyond what [*libpng*](http://www.libpng.org/pub/png/libpng.html) supports. *Swift PNG* outperforms *libpng* at its highest compression setting by [significant margins](../../tree/master/benchmarks#compression-level-13) for almost all types of input images.
- ***Competitive performance.*** *Swift PNG* offers [competitive performance](../../tree/master/benchmarks/) compared to *libpng*. On appropriate CPU architectures, the *Swift PNG* encoder makes use of [hardware-accelerated hash tables](https://engineering.fb.com/2019/04/25/developer-tools/f14/) for even greater performance.
- ***Pure Swift, all the way down.*** Aside from having no external dependencies, *Swift PNG* is powered by its own, native Swift *DEFLATE* implementation. This means *Swift PNG* works on any platform that Swift itself works on. It also means that *Swift PNG*’s performance [improves as the Swift compiler matures](../../tree/master/benchmarks#performance-by-toolchain).
- ***Batteries included.*** *Swift PNG* comes with [built-in color targets](https://kelvin13.github.io/png/PNG/Color/) with support for [premultiplied alpha](https://kelvin13.github.io/png/PNG/RGBA/premultiplied/). [Convolution](https://kelvin13.github.io/png/PNG/convolve(_:dereference:kernel:)/) and [deconvolution](https://kelvin13.github.io/png/PNG/deconvolve(_:reference:kernel:)/) helper functions make [implementing custom color targets](../../tree/master/examples/#custom-color-targets) a breeze.
On MacOS and Linux, *Swift PNG* has built-in file system support, allowing you to [compress](https://kelvin13.github.io/png/PNG/Data/Rectangular/compress(path:level:hint:)/) or [decompress](https://kelvin13.github.io/png/PNG/Data/Rectangular/decompress(path:)/) an image, given a filepath, in a single function call. Other platforms can take advantage of *Swift PNG*’s [protocol-oriented IO](https://kelvin13.github.io/png/PNG/Bytestream/) to implement their own data loading.
- ***First-class iPhone optimization support.*** *Swift PNG* requires no custom setup or third-party plugins to handle [iPhone-optimized](../../tree/master/examples/#using-iphone-optimized-images) PNG images. iPhone-optimized images just work, on all platforms. Reproduce [`pngcrush`](https://developer.apple.com/library/archive/qa/qa1681/_index.html)’s output with [bit width-aware alpha premultiplication](https://kelvin13.github.io/png/PNG/RGBA/premultiplied(as:)/), for seamless integration anywhere in your application stack.
- ***Comprehensive metadata support.*** *Swift PNG* can parse and validate all public PNG chunks, which are accessible as [strongly-typed metadata records](https://kelvin13.github.io/png/PNG/Metadata/).
- ***Modern error handling.*** *Swift PNG* has a fully stateless and Swift-native [error-handling system](https://kelvin13.github.io/png/PNG/Error/).
This release addresses `@_specialize` warnings produced by compiler PR [#30962](https://github.com/apple/swift/pull/30962) which affects users using the nightly 5.2+ builds.
This release fixes some compiler warnings due to compiler drift from Swift 4.2 to 5.2+, and with the agreement of all contributors, [re-licenses](https://github.com/kelvin13/png/commit/a8c94cc4ef539f8d7300492c6c3d7c3265f44d61) the library under a weaker copyleft license, the Mozilla Public License 2.0.
The library has been completely rewritten since version 2.0.1 and now features a much streamlined and improved API, as well as ancillary PNG chunk support, and a wider variety of color format inputs and outputs. Grayscale–alpha and indexed color now have first-class status in the 3.0 API, and are fully integrated with all PNG color backends in the file format’s specification. The typing system has also been greatly strengthened, resulting in an API which returns far fewer optionals, provides more expressive enumerations, and has a much greater chance of catching errors at compile time.
This release adds a new overload to `png_encode(path:raw_data:properties:chunk_size:)` that takes a Swift `UnsafeBufferPointer<UInt8>` instead of an `Array`, to avoid having to recopy a foreign array into Swift managed memory.
In addition to being faster and more memory-efficient, MaxPNG 2 brings new features:
* Support for indexed-color and interlaced PNG files
* Passes all [PNG test suite test cases](http://www.schaik.com/pngsuite/pngsuite.html#basic)
* Contiguous encoding and decoding functions, which are more efficient than the progressive variety
* Support for chroma keys, which are split between the `PLTE` and `tRNS` chunks
* RGBA normalization
* Ability to generate premultiplied alpha
* Ability to generate Cairo buffers from PNG files
* Ability to decompose interlaced PNGs into their constituent subimages
* Ability to encode indexed and interlaced PNG files
* Increased safety and validation
* Better-designed API and API naming
* Full API [documentation](https://github.com/kelvin13/maxpng/blob/master/doc/maxpng.md)