To compress an image you need to create a compressor object using
with-compressor
macro and then call compress-to-octets
function
supplying an array of pixels you want to become a jpeg image. The result is
an array of octets representing the compressed image. You can write the
result directly to file using compress
instead. This example creates an
image with dimensions 200x300 filled with red color:
(let* ((width 200)
(height 300)
(array (make-array (* 3 width height)
:element-type '(unsigned-byte 8))))
(loop for i below (length array) by 3 do
(setf (aref array i) 255))
(jpeg-turbo:with-compressor (handle)
(jpeg-turbo:compress handle "~/test.jpg" array width height :rgb)))
with-compressor
((handle) &body body)
handle
. The handle is safely freed after use.compress-to-octets
(handle array width height pixel-format &key (quality 90) (subsamp s-444) flags)
handle
is a compressor handle
created with with-compressor
. array
is a simple array of
(unsigned-byte 8)
values containing pixel data. Values of
pixel-format
described in section pixel
formats. quality
is an integer from 1 to 100. Higher values mean
better quality. subsamp
is described in
subsampling section and flags
in
flags section.compress
(handle filename array width height pixel-format &key (quality 90) (subsamp s-444) flags)
filename
. See compress-to-octets
for more info. Decompression is handled in the similar way: you create a decompressor
object using :with-decompressor
and use a function
decompress-from-octets
(when you decompress from array of octets) or
decompress
(when you decompress from file). Also you can decompress the
header of an image only (see below).
with-decompressor
((handle) &body body)
handle
. The handle is safely freed after use.scaling-factors
nil
libjpeg-turbo
decompress-from-octets
(handle array &key (scaling-factor 1) (pixel-format rgb) flags)
Decompress a jpeg image. handle
is a decompressor handle
created with with-decompressor
. array
is a simple array of
(unsigned-byte 8)
values containing a compressed image. If
pixel-format
is specified, libjpeg-turbo
converts output pixel
format to a specified value. For the values of pixel-format
see
the section pixel formats. For more information about
flags
see the section flags. If scaling-factor
is specified librurbo-jpeg
will scale the output image to this
scaling factor. Possible values are returned by scaling-factors
.
Return a decompressed image as a simple-array of (unsigned-byte 8)
value in the same manner as cl-jpeg
does.
decompress
(handle filename &key (scaling-factor 1) (pixel-format rgb) flags)
filename
. See decompress-from-octets
for more infodecompress-header-from-octets
(handle array)
handle
must be a handle to
decompressor created with with-decompressor
. array
must be a
simple array of (unsigned-byte 8)
values containing compressed
jpeg image. Function returns four values:
- Width of an image.
- Height of an image.
- Chroma subsampling. See subsampling section.
- Colorspace. See colorspaces section.
decompress-header
(handle filename)
decompress-header-from-octets
but
reads compressed image directly from file with the name filename
. In the case of an error all these functions signal jpeg-error
condition.
jpeg-error
error-string
Option Value Allocation: instance Type: string
Initarg: :error-string
Readers: (jpeg-error-string)