Commit 686729beb for imagemagick.org
commit 686729beb0d4c5e372b59261da7853240aacf6e8
Author: Cristy <urban-warrior@imagemagick.org>
Date: Sun Jul 12 20:39:04 2026 -0400
https://github.com/ImageMagick/ImageMagick/issues/8858
diff --git a/coders/jxl.c b/coders/jxl.c
index 95383c862..af760c2e3 100644
--- a/coders/jxl.c
+++ b/coders/jxl.c
@@ -992,6 +992,9 @@ static MagickBooleanType WriteJXLImage(const ImageInfo *image_info,Image *image,
*exif_profile = (StringInfo *) NULL,
*xmp_profile = (StringInfo *) NULL;
+ double
+ distance = -1.0;
+
JxlBasicInfo
basic_info;
@@ -1156,6 +1159,21 @@ static MagickBooleanType WriteJXLImage(const ImageInfo *image_info,Image *image,
JxlEncoderDestroy(jxl_info);
ThrowWriterException(CoderError,"UnableToWriteImageData");
}
+ option=GetImageOption(image_info,"jxl:distance");
+ if (option != (const char *) NULL)
+ distance=StringToDouble(option,(char **) NULL);
+ else
+ {
+ option=GetImageOption(image_info,"jxl:quality");
+ if (option != (const char *) NULL)
+ {
+ double quality = StringToDouble(option,(char **) NULL);
+ if (quality >= 100.0)
+ distance=0.0;
+ else
+ distance=(100.0-quality)/100.0*15.0;
+ }
+ }
frame_settings=JxlEncoderFrameSettingsCreate(jxl_info,
(JxlEncoderFrameSettings *) NULL);
if (frame_settings == (JxlEncoderFrameSettings *) NULL)
@@ -1169,9 +1187,17 @@ static MagickBooleanType WriteJXLImage(const ImageInfo *image_info,Image *image,
(void) JxlEncoderSetFrameDistance(frame_settings,0.f);
(void) JxlEncoderSetFrameLossless(frame_settings,JXL_TRUE);
}
- else if (image_info->quality != 0)
- (void) JxlEncoderSetFrameDistance(frame_settings,
- JXLGetDistance((float) image_info->quality));
+ else
+ if (image_info->quality != 0)
+ (void) JxlEncoderSetFrameDistance(frame_settings,
+ JXLGetDistance((float) image_info->quality));
+ if (distance >= 0.0)
+ {
+ if (distance <= 0.0)
+ (void) JxlEncoderSetFrameLossless(frame_settings,1);
+ else
+ (void) JxlEncoderSetFrameDistance(frame_settings,distance);
+ }
option=GetImageOption(image_info,"jxl:effort");
if (option != (const char *) NULL)
(void) JxlEncoderFrameSettingsSetOption(frame_settings,