A reader might wonder, why care about the arithmetic encoding? Recently, I
tried to compress a rather big scan (private content, an A4 page at 1200 dpi
with black foreground text and a nontrivial green-white background) into a JPEG
file of a possibly small size. I ran:
cjpeg -quality 0 -arithmetic -dct float -outfile output.arithmetic.jpg -report
-strict -verbose input.pnm
cjpeg -quality 0 -optimize -dct float -outfile output.optimized.jpg -report
-strict -verbose input.pnm
cjpeg -quality 0 -dct float -outfile output.unoptimized.jpg -report -strict
-verbose input.pnm
(Quality 1 would do as well. The real file names have been replaced by “input”
and “output” for privacy here.)
The sizes are this:
output.arithmetic.jpg: 239224 bytes
output.optimized.jpg: 807963 bytes
output.unoptimized.jpg: 1928235 bytes
The foregrounds of the three files are readable and have visually comparable
quality. The savings in size between output.arithmetic.jpg and
output.optimized.jpg are a factor exceeding 3.3. (And NOT a tiny one-digit
percentage, as reported in “A Review on JPEG2000 Image Compression” by Maini
and Mehra and in the Wikipedia article on JPEG.) These savings do make a
difference if you use more images of this kind and your storage or bandwidth is
restricted.