]> granicus.if.org Git - imagemagick/commitdiff
Don't write PNG gAMA or cHRM chunks when writing the sRGB or iCCP chunk.
authorglennrp <glennrp@git.imagemagick.org>
Wed, 3 Apr 2013 13:41:41 +0000 (13:41 +0000)
committerglennrp <glennrp@git.imagemagick.org>
Wed, 3 Apr 2013 13:41:41 +0000 (13:41 +0000)
coders/png.c

index 04399394f8a252c4b434b1c944491e55dff7878a..0fe8bbbbde0ea0f08f7e46c5f241d843e53c080a 100644 (file)
@@ -2622,12 +2622,10 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
          png_set_sRGB(ping,ping_info,
             Magick_RenderingIntent_to_PNG_RenderingIntent
             (image->rendering_intent));
-         if (ping_found_gAMA != MagickTrue)
-            png_set_gAMA(ping,ping_info,1.000f/2.200f);
          file_gamma=1.000f/2.200f;
          ping_found_sRGB=MagickTrue;
          (void) LogMagickEvent(CoderEvent,GetMagickModule(),
-           "    Setting sRGB and gAMA as if in input");
+           "    Setting sRGB as if in input");
       }
     }
 
@@ -7801,7 +7799,9 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
     ping_have_non_bw,
     ping_have_PLTE,
     ping_have_bKGD,
+    ping_have_iCCP,
     ping_have_pHYs,
+    ping_have_sRGB,
     ping_have_tRNS,
 
     ping_exclude_bKGD,
@@ -7958,7 +7958,9 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
   ping_have_non_bw=MagickTrue;
   ping_have_PLTE=MagickFalse;
   ping_have_bKGD=MagickFalse;
+  ping_have_iCCP=MagickFalse;
   ping_have_pHYs=MagickFalse;
+  ping_have_sRGB=MagickFalse;
   ping_have_tRNS=MagickFalse;
 
   ping_exclude_bKGD=mng_info->ping_exclude_bKGD;
@@ -10445,6 +10447,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
                          (png_const_bytep) GetStringInfoDatum(profile),
 #endif
                          (png_uint_32) GetStringInfoLength(profile));
+                       ping_have_iCCP = MagickTrue;
                  }
              }
 
@@ -10484,6 +10487,8 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
           (void) png_set_sRGB(ping,ping_info,(
             Magick_RenderingIntent_to_PNG_RenderingIntent(
               image->rendering_intent)));
+
+          ping_have_sRGB = MagickTrue;
         }
     }
 
@@ -10491,6 +10496,8 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
 #endif
     {
       if (ping_exclude_gAMA == MagickFalse &&
+          ping_have_iCCP == MagickFalse &&
+          ping_have_sRGB == MagickFalse &&
           (ping_exclude_sRGB == MagickFalse ||
           (image->gamma < .45 || image->gamma > .46)))
       {
@@ -10508,14 +10515,14 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
         }
       }
 
-      if (ping_exclude_cHRM == MagickFalse)
+      if (ping_exclude_cHRM == MagickFalse && ping_have_sRGB == MagickFalse)
         {
           if ((mng_info->have_write_global_chrm == 0) &&
               (image->chromaticity.red_primary.x != 0.0))
             {
               /*
                 Note image chromaticity.
-                To do: check for cHRM+gAMA == sRGB, and write sRGB instead.
+                Note: if cHRM+gAMA == sRGB write sRGB instead.
               */
                PrimaryInfo
                  bp,