stackotter/jpeg
Swift *JPEG* is a cross-platform pure Swift framework for decoding, inspecting, editing, and encoding JPEG images. The core framework has no external dependencies, including *Foundation*, and should compile and provide consistent behavior on *all* Swift platforms. The framework s
[tutorials and example programs](examples/)
[api reference](https://kelvin13.github.io/jpeg/)
getting started
To Swift JPEG in a project, add this descriptor to the dependencies list in your Package.swift:
.package(url: "https://github.com/kelvin13/jpeg", .exact("1.0.0")) basic usage
Decode an image:
import JPEG
func decode(jpeg path:String) throws
{
guard let image:JPEG.Data.Rectangular<JPEG.Common> = try .decompress(path: path)
else
{
// failed to access file from file system
}
let rgb:[JPEG.RGB] = image.unpack(as: JPEG.RGB.self),
size:(x:Int, y:Int) = image.size
// ...
}Encode an image:
import JPEG
func encode(jpeg path:String, size:(x:Int, y:Int), pixels:[JPEG.RGB],
compression:Double) // 0.0 = highest quality
throws
{
let layout:JPEG.Layout<JPEG.Common> = .init(
format: .ycc8,
process: .baseline,
components:
[
1: (factor: (2, 2), qi: 0), // Y
2: (factor: (1, 1), qi: 1), // Cb
3: (factor: (1, 1), qi: 1), // Cr
],
scans:
[
.sequential((1, \.0, \.0), (2, \.1, \.1), (3, \.1, \.1)),
])
let jfif:JPEG.JFIF = .init(version: .v1_2, density: (72, 72, .inches))
let image:JPEG.Data.Rectangular<JPEG.Common> =
.pack(size: size, layout: layout, metadata: [.jfif(jfif)], pixels: rgb)
try image.compress(path: path, quanta:
[
0: JPEG.CompressionLevel.luminance( compression).quanta,
1: JPEG.CompressionLevel.chrominance(compression).quanta
])
}Package Metadata
Repository: stackotter/jpeg
Default branch: master
README: README.md