NAME
jpg_compress, jpg_decompress - Joint Photographic Experts
Group(JPEG) image compression scheme
SYNOPSIS
#include "CVIPimage.h"
#include "jinclude.h"
#include "jversion.h"
int jpg_compress(Image *cvipImage, char *filename, int qual-
ity, CVIP_BOOLEAN grayscale, CVIP_BOOLEAN optimize, int
smooth, CVIP_BOOLEAN verbose, char *qtablesFile)
<quality> - Scale quantization tables to adjust image
quality. Quality is 0 (worst) to 100 (best); default is 75.
(See below for more info.)
<grayscale> - Create monochrome JPEG file from color input.
Be sure to use this switch when compressing a grayscale GIF
file, because cjpeg isn't bright enough to notice whether a
GIF file uses only shades of gray. By saying -grayscale,
you'll get a smaller JPEG file that takes less time to pro-
cess.
<optimize> - Perform optimization of entropy encoding
parameters. Without this, default encoding parameters are
used. -optimize usually makes the JPEG file a little
smaller, but cjpeg runs somewhat slower and needs much more
memory. Image quality and speed of decompression are unaf-
fected by -optimize.
<smooth> - Smooth the input image to eliminate dithering
noise. N, ranging from 1 to 100, indicates the strength of
smoothing. 0 (the default) means no smoothing.
<verbose> - Enable debug printout. More -v's give more
printout. Also, version information is printed at startup.
<qtables file> - Use the quantization tables given in
the specified file. The file should contain one to four
tables (64 values each) as plain text. Comments preceded by
'#' may be included in the file. The tables are implicitly
numbered 0,1,etc. If -quality N is also specified, the
values in the file are scaled accordingto cjpeg's quality
scaling curve.
Image *jpg_decompress(char *filename, int colors,
CVIP_BOOLEAN blocksmooth, CVIP_BOOLEAN grayscale,
CVIP_BOOLEAN nodither, CVIP_BOOLEAN verbose);
<colors> - Reduce image to at most N colors. This
reduces the number of colors used in the output image, so
that it can be displayed on a colormapped display or stored
in a colormapped file format. For example, if you have an
8-bit display, you'd need to reduce to 256 or fewercolors.
(-colors is the recommended name, -quantize is provided only
for backwards compatibility.)
<blocksmooth> -Perform cross-block smoothing. This is slow,
quite memory-intensive, and only seems to improve the image
at very low quality settings (-quality 10 to 20 or so). At
normal quality settings it may make things worse.
<grayscale> - Force gray-scale output even if JPEG file is
color. Useful for viewing on monochrome displays.
<nodither> - Do not use dithering in color quantization.
By default, Floyd-Steinberg dithering is applied when quan-
tizing colors, but on some images dithering may result in
objectionable "graininess". If that happens, you can turn
off dithering with -nodither. -nodither is ignored unless
you also say -colors N.
<verbose> - Enable debug printout. More -v's give more
printout. Also, version information is printed at startup.
PATH
$CVIPHOME/COMPRESSION/jpeg.c
DESCRIPTION
JPEG (pronounced "jay-peg") is a standardized image compres-
sion mechanism. JPEG stands for Joint Photographic Experts
Group, the original name of the committee that wrote the
standard. JPEG is designed for compressing either full-color
or gray-scale images of natural, real-world scenes. JPEG is
"lossy," meaning that the decompressed image isn't quite the
same as the one you started with. JPEG is designed to
exploit known limitations of the human eye, notably the fact
that small color changes are perceived less accurately than
small changes in brightness. A useful property of JPEG is
that the degree of lossiness can be varied by adjusting
compression parameters. This means that the image maker can
trade off file size against output image quality.
The function code is based on BETA TEST release 6a of 7-
Feb-96, the Independent JPEG Groups free JPEG software.
TYPES AND CONSTANTS
None
RETURN VALUES
jpg_compress: 0 on success, -1 on failure
jpg_decompression: an uncompressed image pointer on
success,a NULL pointer on failure
HISTORY
History information recorded: None
EXAMPLE
#include "CVIPdef.h"
#include "CVIPimage.h"
#include "CVIPconvert.h"
#include "CVIPcompress.h"
void main() {
Image *cvipImage, *outImage;
IMAGE_FORMAT format;
char *inputfile, *outputfile;
int returnVal;
setDisplay_Image("RamViewer", "Default");
print_CVIP("\n\t\tEnter the Input File Name: ");
inputfile = getString_CVIP();
cvipImage = read_Image(inputfile, 1);
view_Image(cvipImage, inputfile);
print_CVIP("\n\t\tEnter the Compressed File Name:");
outputfile = getString_CVIP();
returnVal = jpg_compress(cvipImage, outputfile, 75,
CVIP_NO, CVIP_NO, 0, CVIP_NO, NULL);
if (returnVal<0) {
error_CVIP("jpg_compress", "compression failed");
exit(1);
}
outImage = jpg_decompress(outputfile, 256, CVIP_NO,
CVIP_NO, CVIP_YES, CVIP_YES);
if ((cvipImage)==NULL){
error_CVIP("jpg_decompress", "decompression failed");
exit(1);
}
else
view_Image(outImage, outputfile);
free(inputfile);
free(outputfile);
}
BUGS
jpg_compress: to create monochrome JPEG file from color
input by set input argument grayscale=CVIP_YES does not
work; jpg_decompress: to force gray-scale output even if
JPEG file is color by set input argument grayscale=CVIP_YES
does not work;
SEE ALSO
libcompress,
AUTHOR
Copyright (C) 1996 SIUE - by Scott Umbaugh, Kui Cai.