Closed ishitatsuyuki closed 4 years ago
Also any mobile app can implement WebP support, which makes it even more worthwhile.
Firefox released version 65 early 2019, now providing WebP support too.
Agreed, browser support is good enough and the benefits plenty, please support!
libwebp is 1.0 now, so we can support it.
Are there any news about WebP support?
Not yet, although we had a big breakthrough today that should free up more dev effort towards webp and rewriting the webserver.
I'm maintaining bindings if you need them: https://lib.rs/crates/libwebp-sys
@kornelski Perfect! I'll use those. Do you have any suggestions for output tuning or presets? The array of options seems dizzying.
struct WebPConfig {
int lossless; // Lossless encoding (0=lossy(default), 1=lossless).
float quality; // between 0 and 100. For lossy, 0 gives the smallest
// size and 100 the largest. For lossless, this
// parameter is the amount of effort put into the
// compression: 0 is the fastest but gives larger
// files compared to the slowest, but best, 100.
int method; // quality/speed trade-off (0=fast, 6=slower-better)
WebPImageHint image_hint; // Hint for image type (lossless only for now).
// Parameters related to lossy compression only:
int target_size; // if non-zero, set the desired target size in bytes.
// Takes precedence over the 'compression' parameter.
float target_PSNR; // if non-zero, specifies the minimal distortion to
// try to achieve. Takes precedence over target_size.
int segments; // maximum number of segments to use, in [1..4]
int sns_strength; // Spatial Noise Shaping. 0=off, 100=maximum.
int filter_strength; // range: [0 = off .. 100 = strongest]
int filter_sharpness; // range: [0 = off .. 7 = least sharp]
int filter_type; // filtering type: 0 = simple, 1 = strong (only used
// if filter_strength > 0 or autofilter > 0)
int autofilter; // Auto adjust filter's strength [0 = off, 1 = on]
int alpha_compression; // Algorithm for encoding the alpha plane (0 = none,
// 1 = compressed with WebP lossless). Default is 1.
int alpha_filtering; // Predictive filtering method for alpha plane.
// 0: none, 1: fast, 2: best. Default if 1.
int alpha_quality; // Between 0 (smallest size) and 100 (lossless).
// Default is 100.
int pass; // number of entropy-analysis passes (in [1..10]).
int show_compressed; // if true, export the compressed picture back.
// In-loop filtering is not applied.
int preprocessing; // preprocessing filter (0=none, 1=segment-smooth)
int partitions; // log2(number of token partitions) in [0..3]
// Default is set to 0 for easier progressive decoding.
int partition_limit; // quality degradation allowed to fit the 512k limit on
// prediction modes coding (0: no degradation,
// 100: maximum possible degradation).
int use_sharp_yuv; // if needed, use sharp (and slow) RGB->YUV conversion
};
I haven't looked into tuning these options yet.
Thanks! I've just used the simple encoder API for now.
WebP support can be activated using the webplossy {quality} and webplossless encoder presets or using &format=webp&webp.quality=x or &format=webp&webp.lossless=true respectively.
This is in master.
Update: you now use &webp.lossless=true|false and &webp.quality=0..100 to adjust compression rather than reusing the jpeg quality command.
While WebP is only supported by Chrome, its dominance of market means that about 70% of the users will able to load that format.
WebP is a good compromise between JPEG and PNG, in terms that it can perform lossy compression while not destroying alpha properties. It simply compresses better, too.