Skip to content

PJA 0.5.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 18:41
· 150 commits to main since this release

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 pja command 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 a shows (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 .7z archives of photos, corpus and arithmetic JPEGs, and the .pja files.
    • The zpaq-std plugin's codecs, streams and ZPAQL are 0.4.0's.
  • Opening old and new files. Archives and .pja files 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.