mirror of
https://github.com/webmproject/libwebp.git
synced 2025-07-18 23:09:52 +02:00
gif2webp: Improved compression for lossy animated WebP
We reduce transparency by turning some transparent pixels into corresponding RGB values from previous canvas. This improves compression by about 23%. Change-Id: I02d70a43a1d0906ac09a7e2dc510be3b2d38f593
This commit is contained in:
@ -287,6 +287,25 @@ void WebPUtilBlendPixels(const WebPPicture* const src,
|
||||
}
|
||||
}
|
||||
|
||||
void WebPUtilReduceTransparency(const WebPPicture* const src,
|
||||
const WebPFrameRect* const rect,
|
||||
WebPPicture* const dst) {
|
||||
int j;
|
||||
assert(src->width == dst->width && src->height == dst->height);
|
||||
for (j = rect->y_offset; j < rect->y_offset + rect->height; ++j) {
|
||||
int i;
|
||||
for (i = rect->x_offset; i < rect->x_offset + rect->width; ++i) {
|
||||
const uint32_t src_pixel = src->argb[j * src->argb_stride + i];
|
||||
const int src_alpha = src_pixel >> 24;
|
||||
const uint32_t dst_pixel = dst->argb[j * dst->argb_stride + i];
|
||||
const int dst_alpha = dst_pixel >> 24;
|
||||
if (dst_alpha == 0 && src_alpha == 0xff) {
|
||||
dst->argb[j * dst->argb_stride + i] = src_pixel;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Key frame related utilities.
|
||||
|
||||
|
Reference in New Issue
Block a user