JBIG-KIT

by Markus Kuhn

JBIG-KIT is a software implementation of the JBIG1 data compression standard (ITU-T T.82), which was designed for bi-level image data, such as scanned documents. This library is available in portable C code. It is widely used in fax products, printer firmware, printer drivers, document management systems and imaging software.

The package includes two variant implementations: jbig.c implements nearly all options of the standard, but has to keep the full uncompressed image in memory, whereas jbig85.c implements just the ITU-T T.85 profile, with memory management optimized for embedded and fax applications, buffering only a few lines of the uncompressed image in memory, able to stream images of initially unknown height.

Download

The latest release of JBIG-KIT is

  https://www.cl.cam.ac.uk/~mgk25/jbigkit/download/jbigkit-2.1.tar.gz (2014-04-08)

See the revision history for a summary of recent changes.

You can also download the latest source code and full revision history using git:

  git clone https://www.cl.cam.ac.uk/~mgk25/git/jbigkit

(Releases appear in the git repository as tags on the “master” branch, so to go to the current release 2.1 in git, do “git checkout v2.1”.)

Release announcement: Version 2.1 is a security update that remains API and ABI backwards compatible to version 2.0. Users who process BIE data from untrusted sources should upgrade.

Description

JBIG-KIT provides a portable library of compression and decompression functions with a documented interface that you can include very easily into your image or document processing software. In addition, JBIG-KIT provides ready-to-use compression and decompression programs with a simple command line interface (similar to the converters found in netpbm).

JBIG-KIT implements the specification

International Standard ISO/IEC 11544:1993 and ITU-T Recommendation T.82(1993):
Information technology — Coded representation of picture and audio information — Progressive bi-level image compression

which is commonly referred to as the “JBIG1 standard”. JBIG (Joint Bi-level Image experts Group) is the committee that developed this international standard for the lossless compression of images through arithmetic coding. Like the well-known JPEG and MPEG compression standards, JBIG has been developed and published through the International Organization for Standardization (ISO) and the International Telecommunication Union (ITU).

The JBIG1 compression algorithm offers the following features:

JBIG-KIT is free software under the GNU General Public License (for commercial licenses, see below). JBIG-KIT provides a portable library implemented in ANSI/ISO C for encoding and decoding JBIG1 data streams together with documentation.

Special features of the JBIG-KIT implementation are:

Limitations: The library was not designed for machine architectures with registers smaller than 32 bits (e.g., old MS-DOS C compilers, 8/16-bit microcontrollers or DSPs) on which a number of very efficient optimization techniques used in this software are not effective. For maximum performance, a 32-bit processor is required (64-bit systems work fine, too). On architectures with 16-bit pointer arithmetic, only very small images can be processed.

Applications: Examples of standard data transfer formats that encapsulate JBIG1 streams include Zenographics Zj-stream, QPDL (Quick Page Description Language, aka SPL2, used by some Samsung and Xerox printers), TIFF-FX (RFC 2301), and fax.

Licensing

Public licence: You can use JBIG-KIT free of charge under the conditions of the GNU General Public Licence. Linking JBIG-KIT statically or dynamically with other modules is making a combined work based on JBIG-KIT. Thus, the terms and conditions of the GNU General Public License cover the whole combination.

Commercial licence: Alternatively, you can also get a commercial licence for JBIG-KIT for applications that are incompatible with GPL requirements. For details, please contact Lily Chan at Cambridge Enterprise (software@enterprise.cam.ac.uk, +44 1223 764792).

Dependency licence: We sometimes receive licence enquiries from people who want to link their proprietary application software with JBIG-KIT solely to satisfy an installation dependency of a precompiled third-party library, but whose application software is designed such that it can never actually use the JBIG encoding. A common example is the libtiff library on Linux: many Linux distributions include that under a BSD-like licence, but commonly compile it such that the GPL-licenced JBIG-KIT package also has to be installed as a prerequisite, to ensure that libtiff loads without dynamic-linking error message. As the author of JBIG-KIT, it is my personal opinion that you only need a licence for JBIG-KIT if you actually intend to use it to encode or decode JBIG data. If your application software makes sure that its users never can actually process JBIG data, in other words if the JBIG-KIT code is not actually reachable in the control flow of your software, then in my opinion you do not need a licence for JBIG-KIT, even if a precompiled JBIG-KIT shipped with the operating system is loaded by the operating system's linker for your application. (Should your lawyers still be worried, you can ask Cambridge Enterprise to issue a properly executed “dependency licence” for a reduced fee.)

Patents: Annex E of the JBIG1 standard lists a number of patents that might once have been applicable to implementations. These have now expired worldwide. More details ...

Support

Feel free to email me questions, problem reports, patches, suggestions, success stories, comments, etc. I will try to provide free support and maintenance for this software for the foreseeable future depending on my available time.

From time to time, I may also be available to do small consulting projects in relation to JBIG1.

created 1995-06-08 – last modified 2018-02-06 – http://www.cl.cam.ac.uk/~mgk25/jbigkit/