From 59575fa5c228308a41d7f5028390be2083aaaf6d Mon Sep 17 00:00:00 2001 From: glennrp Date: Sat, 31 Dec 2011 21:31:39 +0000 Subject: [PATCH] Fix "-quality" handling in the JNG encoder. --- coders/png.c | 57 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/coders/png.c b/coders/png.c index 650acb345..e9938612a 100644 --- a/coders/png.c +++ b/coders/png.c @@ -11625,6 +11625,7 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info, transparent; size_t + jng_alpha_quality, jng_quality; logging=LogMagickEvent(CoderEvent,GetMagickModule(), @@ -11636,19 +11637,17 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info, status=MagickTrue; transparent=image_info->type==GrayscaleMatteType || - image_info->type==TrueColorMatteType; - jng_color_type=10; - jng_alpha_sample_depth=0; - jng_quality=image_info->quality == 0UL ? 75UL : image_info->quality; - jng_alpha_compression_method=0; + image_info->type==TrueColorMatteType || image->matte != MagickFalse; - if (image->matte != MagickFalse) - { - /* if any pixels are transparent */ - transparent=MagickTrue; - if (image_info->compression==JPEGCompression) - jng_alpha_compression_method=8; - } + jng_quality=image_info->quality == 0UL ? 75UL : image_info->quality%1000; + + jng_alpha_compression_method=image->compression==JPEGCompression? 8 : 0; + + jng_alpha_quality=image_info->quality == 0UL ? 75UL : + image_info->quality; + + if (jng_alpha_quality >= 1000) + jng_alpha_quality /= 1000; if (transparent) { @@ -11681,19 +11680,19 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info, status=SeparateImage(jpeg_image,exception); (void) SetPixelChannelMapMask(jpeg_image,channel_mask); jpeg_image->matte=MagickFalse; - - if (jng_quality >= 1000) - jpeg_image_info->quality=jng_quality/1000; - - else - jpeg_image_info->quality=jng_quality; - + jpeg_image->quality=jng_alpha_quality; jpeg_image_info->type=GrayscaleType; (void) SetImageType(jpeg_image,GrayscaleType,exception); (void) AcquireUniqueFilename(jpeg_image->filename); (void) FormatLocaleString(jpeg_image_info->filename,MaxTextExtent, "%s",jpeg_image->filename); } + else + { + jng_alpha_compression_method=0; + jng_color_type=10; + jng_alpha_sample_depth=0; + } /* To do: check bit depth of PNG alpha channel */ @@ -11702,6 +11701,23 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info, TrueColorType && ImageIsGray(image,exception)) jng_color_type-=2; + if (logging != MagickFalse) + { + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " JNG Quality = %d",(int) jng_quality); + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " JNG Color Type = %d",jng_color_type); + if (transparent) + { + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " JNG Alpha Compression = %d",jng_alpha_compression_method); + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " JNG Alpha Depth = %d",jng_alpha_sample_depth); + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " JNG Alpha Quality = %d",(int) jng_alpha_quality); + } + } + if (transparent) { if (jng_alpha_compression_method==0) @@ -12078,7 +12094,8 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info, if (jng_color_type == 8 || jng_color_type == 12) jpeg_image_info->type=GrayscaleType; - jpeg_image_info->quality=jng_quality % 1000; + jpeg_image_info->quality=jng_quality; + jpeg_image->quality=jng_quality; (void) CopyMagickString(jpeg_image_info->magick,"JPEG",MaxTextExtent); (void) CopyMagickString(jpeg_image->magick,"JPEG",MaxTextExtent); -- 2.40.0