cl-jpeg

2023-02-15

A self-contained baseline JPEG codec implementation

Upstream URL

github.com/sharplispers/cl-jpeg

Author

Eugene Zaikonnikov; contributions by Kenan Bölükbaşı, Manuel Giraud, Cyrus Harmon and William Halliburton

License

BSD
README

Build Status

CL-JPEG

Baseline JPEG codec written in Common Lisp. Up-to-date source is hosted on GitHub.

Written by Eugene Zaikonnikov, 1999-2017. Valuable contributors, in no particular order: Henry Harrington, Kenan Bölükbaşı, Manuel Giraud, Cyrus Harmon and William Halliburton.

Image Format

  • B, G, R pixels in case of colorspace-converted three component image
  • Y, Cb, Cr pixels in case where colorspace conversion of three component image was disabled
  • array of grayscale pixels in case of single component
  • array of 2 or 4 pixels in the case of two or four component image respectively

Decoding

(DECODE-IMAGE FILENAME &KEY BUFFER (COLORSPACE-CONVERSION T) CACHED-SOURCE-P)

  • FILENAME - jpeg file name
  • BUFFER - optional reusable storage for output image
  • COLORSPACE-CONVERSION controls if YUV to RGB should be performed
  • CACHED-SOURCE-P - the file input layer behaviour

Returns (multiple-valued) decoded IMAGE array in the same format as encoder source image, image HEIGHT and image WIDTH.

(DECODE-STREAM STREAM &KEY BUFFER (COLORSPACE-CONVERSION T) DESCRIPTOR CACHED-SOURCE-P)

  • STREAM - jpeg image stream or NIL in case where the buffer is pre-allocated in DESCRIPTOR
  • BUFFER - optional reusable storage for output image
  • COLORSPACE-CONVERSION controls if YUV to RGB should be performed
  • DESCRIPTOR is a JPEG:DESCRIPTOR structure. Can be reused for performance reasons bulk processing applications
  • CACHED-SOURCE-P - the file input layer behaviour

Returns (multiple-valued) decoded IMAGE array in the same format as encoder source image, image HEIGHT and image WIDTH.

(ALLOCATE-BUFFER HEIGHT WIDTH NCOMP)

  • HEIGHT - image height
  • WIDTH - image width
  • NCOMP - number of image components

Allocates and retruns a buffer suitable for storage of the output image in the specified geometry.

(JPEG-FILE-DIMENSIONS FILENAME)

  • FILENAME - the file to be probed

Returns image height, width, number of components, and the type of Adobe colorpsace transform encoded in the image (:YCBCR-RGB, :YCCK-CMYK).

(CONVERT-CMYK-TO-RGB BUFFER H W &key RGB-BUFFER)

  • BUFFER - the input CMYK pixel buffer
  • H,W - image dimensions
  • RGB-BUFFER - optional reusable storage for output RGB image

Returns an RGB conversion of the supplied CMYK image.

###(JPEG-TO-BMP &key INFILE OUTFILE)

Converts JPEG file to BMP file.

Encoding

(ENCODE-IMAGE FILENAME IMAGE NCOMP H W &key SAMPLING Q-TABS Q-FACTOR)

  • FILENAME - output file name
  • IMAGE - input array of pixels
  • NCOMP - number of components in the image
  • H, W - image dimensions
  • SAMPLING - sampling frequency for ncomp components by X and Y axis, e.g. '((2 2) (1 1) (1 1)) for three components, can be omitted for grayscale and RGB images
  • Q-TABS - specifies quantization tables vector, should be 1 for 1, 2 for 2, 2 for 3 and 4 entries for 4 components
  • Q-FACTOR - quality specifier (1-64), default is 64

Encodes the supplied image using the sampling specifier, quantization tables and quantization factor.

(ENCODING-WRAPPER FILENAME IMAGE NCOMP H W &key (QUALITY 4))

  • FILENAME - output file name
  • IMAGE - input array of pixels
  • NCOMP - number of components in the image
  • H, W - image dimensions
  • QUALITY - quality factor on scale from 1 to 5

TODO

  • Add progressive JPEG support in decoder

Dependencies (0)

    Dependents (8)

    • 3b-swf
    • cl-video
    • cl-wavelets
    • dataloader
    • imago
    • omglib
    • opticl
    • retrospectiff
    • GitHub
    • Quicklisp