From e2e023dfa33df284ea1cbe3f068e1003e92f8ce7 Mon Sep 17 00:00:00 2001 From: Madars Date: Tue, 24 Mar 2026 13:54:06 +0200 Subject: [PATCH] Set BackgroundDispose for animated JXL frames with alpha (#8635) JXL delivers fully coalesced frames where each frame is a complete independent image. Without setting dispose, converting transparent animated JXL to GIF/WebP/MNG causes frames to accumulate instead of replacing, making previous frames bleed through transparent areas. --- coders/jxl.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/coders/jxl.c b/coders/jxl.c index 971b4b6d00..a40583713b 100644 --- a/coders/jxl.c +++ b/coders/jxl.c @@ -48,6 +48,7 @@ #include "MagickCore/exception-private.h" #include "MagickCore/image.h" #include "MagickCore/image-private.h" +#include "MagickCore/layer.h" #include "MagickCore/list.h" #include "MagickCore/magick.h" #include "MagickCore/memory_.h" @@ -644,6 +645,9 @@ static Image *ReadJXLImage(const ImageInfo *image_info, (void) memset(&frame_header,0,sizeof(frame_header)); if (JxlDecoderGetFrameHeader(jxl_info,&frame_header) == JXL_DEC_SUCCESS) image->delay=(size_t) frame_header.duration; + if ((basic_info.have_animation == JXL_TRUE) && + (basic_info.alpha_bits != 0)) + image->dispose=BackgroundDispose; break; } case JXL_DEC_NEED_IMAGE_OUT_BUFFER: