Repository navigation
PJA 0.5.0
More JPEGs taken, in two ways: the tiles some formats store without their tables, and two encoder quirks that PJA now repairs.
- JPEGs without their tables (7-Zip, libpja). FlashPix (
.fpx), Picture It's and PhotoDraw's.mix, and TIFF's JPEG keep an image as many small JPEGs that share one set of tables. The tables are written once, in a JPEG that holds only tables, which FlashPix places after the tiles. No decoder reads such a tile alone, so until now they went to LZMA2 as plain bytes. The filter now gives each tile the tables of its container, and PJA codes the tile without storing those tables again. 34 such files from the sample corpus in one archive (-m0=PJA -m1=LZMA2): 71.92% → 59.55%, with every file back. Before, PJA did no better than plain LZMA2 on them. - Encoder quirks, repaired (the
pjacommand and libpja). Some files have restart markers numbered wrong (Second Nature's slide shows) or a stray byte between the scan and the end (Xara). PJA now repairs them, compresses the result as any JPEG, and keeps a record of the repairs so the original comes back byte for byte.pja ashows(repaired: BadRst@…). Xara's JPEGs go from 98.6% to 67–83%. - How these were found. 19,054 different JPEGs were cut out of the sample corpus' other files (video, documents, PDF, FlashPix, TIFF, resources). 9,303 of them were tiles without their tables, and 26 had quirks. 14 of those 26 are repaired; the other 12 look damaged and still go as bytes.
- What stays the same.
- For every other file the output is byte for byte 0.4.0's: the CI's stream hash, the
.7zarchives of photos, corpus and arithmetic JPEGs, and the.pjafiles. - The zpaq-std plugin's codecs, streams and ZPAQL are 0.4.0's.
- For every other file the output is byte for byte 0.4.0's: the CI's stream hash, the
- Opening old and new files. Archives and
.pjafiles that use the new records or the repairs do not open with 0.4.0 or earlier, which stops with a data error. Every older file opens with 0.5.0.
Details are in doc/LIBRARY.md and doc/CODEC.md.
Downloads
| platform | the pja command |
the zpaq-std plugin | libpja (C library, 7-Zip plugin) |
|---|---|---|---|
| Linux x86-64 | pja-0.5.0-linux-x86_64.tar.gz |
pja-0.5.0-zpaqstd-plugin-linux-x86_64.tar.gz |
pja-0.5.0-lib-linux-x86_64.tar.gz |
| Linux x86 (32-bit) | pja-0.5.0-linux-x86.tar.gz |
pja-0.5.0-zpaqstd-plugin-linux-x86.tar.gz |
pja-0.5.0-lib-linux-x86.tar.gz |
| Linux arm64 | pja-0.5.0-linux-arm64.tar.gz |
pja-0.5.0-zpaqstd-plugin-linux-arm64.tar.gz |
pja-0.5.0-lib-linux-arm64.tar.gz |
| macOS arm64 | pja-0.5.0-macos-arm64.tar.gz |
pja-0.5.0-zpaqstd-plugin-macos-arm64.tar.gz |
pja-0.5.0-lib-macos-arm64.tar.gz |
| Windows x64 (7 and later) | pja-0.5.0-windows-x64.zip |
pja-0.5.0-zpaqstd-plugin-windows-x64.zip |
pja-0.5.0-lib-windows-x64.zip |
| Windows x86 (XP and later) | pja-0.5.0-windows-x86.zip |
pja-0.5.0-zpaqstd-plugin-windows-x86.zip |
pja-0.5.0-lib-windows-x86.zip |
pja-0.5.0-zpaqstd.tar.gz holds the plugin's sources as zpaq-std vendors them, with VENDOR.md. CI builds and checks every binary on its own platform (.github/workflows/release.yml); libpja is checked with its C test and, on Linux x86-64, through a real 7-Zip. SHA256SUMS has the checksums. The Linux builds need glibc 2.34 or later. The macOS ones are not signed: run xattr -d com.apple.quarantine after unpacking.