Add image-hint for low-color images.

For low-color images, it may be better to not use color-palettes.
Users should treat this as one another hint (as with Photo &
Picture) and another parameter for tuning the compression density.
The optimum compression can still be obtained by running (outer loop)
compression with all possible tunable parameters.

Change-Id: Icb1a4face2a84774e16e801aee4a8ae97e232e8a
This commit is contained in:
Vikas Arora 2012-07-31 23:07:52 -07:00
parent 4eb7aa64da
commit dd1c3873fe
6 changed files with 10 additions and 7 deletions

2
README
View File

@ -168,7 +168,7 @@ options:
-noalpha ............... discard any transparency information. -noalpha ............... discard any transparency information.
-lossless .............. Encode image losslessly. -lossless .............. Encode image losslessly.
-hint <string> ......... Specify image characteristics hint. -hint <string> ......... Specify image characteristics hint.
One of: photo or picture One of: photo, picture or graph.
-short ................. condense printed message -short ................. condense printed message
-quiet ................. don't print anything. -quiet ................. don't print anything.

View File

@ -844,7 +844,7 @@ static void HelpLong(void) {
printf(" -noalpha ............... discard any transparency information.\n"); printf(" -noalpha ............... discard any transparency information.\n");
printf(" -lossless .............. Encode image losslessly.\n"); printf(" -lossless .............. Encode image losslessly.\n");
printf(" -hint <string> ......... Specify image characteristics hint.\n"); printf(" -hint <string> ......... Specify image characteristics hint.\n");
printf(" One of: photo or picture\n"); printf(" One of: photo, picture or graph\n");
printf("\n"); printf("\n");
printf(" -short ................. condense printed message\n"); printf(" -short ................. condense printed message\n");
@ -973,6 +973,8 @@ int main(int argc, const char *argv[]) {
config.image_hint = WEBP_HINT_PHOTO; config.image_hint = WEBP_HINT_PHOTO;
} else if (!strcmp(argv[c], "picture")) { } else if (!strcmp(argv[c], "picture")) {
config.image_hint = WEBP_HINT_PICTURE; config.image_hint = WEBP_HINT_PICTURE;
} else if (!strcmp(argv[c], "graph")) {
config.image_hint = WEBP_HINT_GRAPH;
} else { } else {
fprintf(stderr, "Error! Unrecognized image hint: %s\n", argv[c]); fprintf(stderr, "Error! Unrecognized image hint: %s\n", argv[c]);
goto Error; goto Error;

View File

@ -164,7 +164,7 @@ Encode the image without any loss.
.TP .TP
.B \-hint string .B \-hint string
Specify the hint about input image type. Possible values are: Specify the hint about input image type. Possible values are:
\fBphoto\fP, and \fBpicture\fP. \fBphoto\fP, \fBpicture\fP or \fBgraph\fP.
.TP .TP
.B \-noasm .B \-noasm
Disable all assembly optimizations. Disable all assembly optimizations.

View File

@ -120,7 +120,7 @@ int WebPValidateConfig(const WebPConfig* config) {
return 0; return 0;
if (config->lossless < 0 || config->lossless > 1) if (config->lossless < 0 || config->lossless > 1)
return 0; return 0;
if (config->image_hint > WEBP_HINT_PHOTO) if (config->image_hint >= WEBP_HINT_LAST)
return 0; return 0;
return 1; return 1;
} }

View File

@ -141,7 +141,7 @@ static int VP8LEncAnalyze(VP8LEncoder* const enc, WebPImageHint image_hint) {
const WebPPicture* const pic = enc->pic_; const WebPPicture* const pic = enc->pic_;
assert(pic != NULL && pic->argb != NULL); assert(pic != NULL && pic->argb != NULL);
enc->use_palette_ = enc->use_palette_ = (image_hint == WEBP_HINT_GRAPH) ? 0 :
AnalyzeAndCreatePalette(pic, enc->palette_, &enc->palette_size_); AnalyzeAndCreatePalette(pic, enc->palette_, &enc->palette_size_);
if (!enc->use_palette_) { if (!enc->use_palette_) {
if (image_hint == WEBP_HINT_DEFAULT) { if (image_hint == WEBP_HINT_DEFAULT) {
@ -162,7 +162,6 @@ static int VP8LEncAnalyze(VP8LEncoder* const enc, WebPImageHint image_hint) {
return 1; return 1;
} }
static int GetHuffBitLengthsAndCodes( static int GetHuffBitLengthsAndCodes(
const VP8LHistogramSet* const histogram_image, const VP8LHistogramSet* const histogram_image,
HuffmanTreeCode* const huffman_codes) { HuffmanTreeCode* const huffman_codes) {

View File

@ -69,7 +69,9 @@ WEBP_EXTERN(size_t) WebPEncodeLosslessBGRA(const uint8_t* bgra,
typedef enum { typedef enum {
WEBP_HINT_DEFAULT = 0, // default preset. WEBP_HINT_DEFAULT = 0, // default preset.
WEBP_HINT_PICTURE, // digital picture, like portrait, inner shot WEBP_HINT_PICTURE, // digital picture, like portrait, inner shot
WEBP_HINT_PHOTO // outdoor photograph, with natural lighting WEBP_HINT_PHOTO, // outdoor photograph, with natural lighting
WEBP_HINT_GRAPH, // Discrete tone image (graph, map-tile etc).
WEBP_HINT_LAST
} WebPImageHint; } WebPImageHint;
typedef struct { typedef struct {