]> granicus.if.org Git - imagemagick/commitdiff
Introducing GetImageColorspaceType()
authorCristy <urban-warrior@imagemagick.org>
Sun, 17 Dec 2017 17:05:09 +0000 (12:05 -0500)
committerCristy <urban-warrior@imagemagick.org>
Sun, 17 Dec 2017 17:05:09 +0000 (12:05 -0500)
MagickCore/colorspace.c
MagickCore/colorspace.h
MagickCore/identify.c
MagickCore/property.c
coders/json.c

index 3b17edaab79cf93f303aeca6c2cf5019e44b2616..961240a5ee8da803a09653cf8122d0eb7d388041 100644 (file)
@@ -91,6 +91,58 @@ static MagickBooleanType
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%   G e t I m a g e C o l o r s p a c e T y p e                               %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  GetImageColorspaceType() returns the potential type of image:
+%  sRGBColorspaceType, RGBColorspaceType, GRAYColorspaceType, etc.
+%
+%  To ensure the image type matches its potential, use SetImageColorspaceType():
+%
+%    (void) SetImageColorspaceType(image,GetImageColorspaceType(image),
+%      exception);
+%
+%  The format of the GetImageColorspaceType method is:
+%
+%      ColorspaceType GetImageColorspaceType(const Image *image,
+%        ExceptionInfo *exception)
+%
+%  A description of each parameter follows:
+%
+%    o image: the image.
+%
+%    o exception: return any errors or warnings in this structure.
+%
+*/
+MagickExport ColorspaceType GetImageColorspaceType(const Image *image,
+  ExceptionInfo *exception)
+{
+  ColorspaceType
+    colorspace;
+
+  ImageType
+    type;
+
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
+  if (image->debug != MagickFalse)
+    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
+  colorspace=image->colorspace;
+  type=IdentifyImageType(image,exception);
+  if ((type == BilevelType) || (type == GrayscaleType) ||
+      (type == GrayscaleAlphaType))
+    colorspace=GRAYColorspace;
+  return(colorspace);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 +     s R G B T r a n s f o r m I m a g e                                     %
 %                                                                             %
 %                                                                             %
index 7fe857f1a086484ba0efa1abc269e85fd4edd519..849768bd5e86b73ecd537c1165ed90aa21205e89 100644 (file)
@@ -59,6 +59,9 @@ typedef enum
   YUVColorspace
 } ColorspaceType;
 
+extern MagickExport ColorspaceType
+  GetImageColorspaceType(const Image *,ExceptionInfo *);
+
 extern MagickExport MagickBooleanType
   SetImageColorspace(Image *,const ColorspaceType,ExceptionInfo *),
   SetImageGray(Image *,ExceptionInfo *),
index 0aebc6487aa19bbdbf8c50952d968eff1bcbf29f..b986b7151cc060952dc93aa1fccda5fe4658e46a 100644 (file)
@@ -506,7 +506,6 @@ MagickExport MagickBooleanType IdentifyImage(Image *image,FILE *file,
     user_time;
 
   ImageType
-    base_type,
     type;
 
   MagickBooleanType
@@ -556,11 +555,7 @@ MagickExport MagickBooleanType IdentifyImage(Image *image,FILE *file,
       if (channel_statistics == (ChannelStatistics *) NULL)
         return(MagickFalse);
       (void) FormatLocaleFile(file,"Channel %s locations:\n",locate);
-      colorspace=image->colorspace;
-      type=IdentifyImageType(image,exception);
-      if ((type == BilevelType) || (type == GrayscaleType) ||
-          (type == GrayscaleAlphaType))
-        colorspace=GRAYColorspace;
+      colorspace=GetImageColorspaceType(image,exception);
       switch (colorspace)
       {
         case RGBColorspace:
@@ -684,11 +679,6 @@ MagickExport MagickBooleanType IdentifyImage(Image *image,FILE *file,
   /*
     Display verbose info about the image.
   */
-  colorspace=image->colorspace;
-  type=IdentifyImageType(image,exception);
-  if ((type == BilevelType) || (type == GrayscaleType) ||
-      (type == GrayscaleAlphaType))
-    colorspace=GRAYColorspace;
   p=GetVirtualPixels(image,0,0,1,1,exception);
   ping=p == (const Quantum *) NULL ? MagickTrue : MagickFalse;
   (void) SignatureImage(image,exception);
@@ -733,19 +723,24 @@ MagickExport MagickBooleanType IdentifyImage(Image *image,FILE *file,
     }
   (void) FormatLocaleFile(file,"  Units: %s\n",CommandOptionToMnemonic(
     MagickResolutionOptions,(ssize_t) image->units));
+  type=GetImageType(image);
   (void) FormatLocaleFile(file,"  Type: %s\n",CommandOptionToMnemonic(
     MagickTypeOptions,(ssize_t) type));
-  base_type=GetImageType(image);
-  if (type != base_type)
+  if (image->type != type)
     (void) FormatLocaleFile(file,"  Base type: %s\n",CommandOptionToMnemonic(
-      MagickTypeOptions,(ssize_t) base_type));
+      MagickTypeOptions,(ssize_t) image->type));
   (void) FormatLocaleFile(file,"  Endianess: %s\n",CommandOptionToMnemonic(
     MagickEndianOptions,(ssize_t) image->endian));
   /*
     Detail channel depth and extrema.
   */
+  colorspace=GetImageColorspaceType(image,exception);
   (void) FormatLocaleFile(file,"  Colorspace: %s\n",CommandOptionToMnemonic(
     MagickColorspaceOptions,(ssize_t) colorspace));
+  if (colorspace != image->colorspace)
+    (void) FormatLocaleFile(file,"  Base colorspace: %s\n",
+      CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
+        image->colorspace));
   channel_statistics=(ChannelStatistics *) NULL;
   channel_moments=(ChannelMoments *) NULL;
   channel_phash=(ChannelPerceptualHash *) NULL;
index 72eb5a858a2b65c95cfc30d1c6b6da3e1502883a..b3d72033bc1d073b4a2060f9293dec9515bb1ad9 100644 (file)
@@ -2801,20 +2801,9 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info,
         }
       if (LocaleCompare("colorspace",property) == 0)
         {
-          ColorspaceType
-            colorspace;
-
-          ImageType
-            type;
-
-          colorspace=image->colorspace;
-          type=IdentifyImageType(image,exception);
-          if ((type == BilevelType) || (type == GrayscaleType) ||
-              (type == GrayscaleAlphaType))
-            colorspace=GRAYColorspace;
           WarnNoImageReturn("\"%%[%s]\"",property);
           string=CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
-            colorspace);
+            GetImageColorspaceType(image,exception));
           break;
         }
       if (LocaleCompare("compose",property) == 0)
index 36881301c8d36f6aaf63305133bd059e2792719b..c445414c2630dc6b430a07e6b3762aabb942a3e1 100644 (file)
@@ -951,7 +951,6 @@ static MagickBooleanType EncodeImageAttributes(Image *image,FILE *file,
     user_time;
 
   ImageType
-    base_type,
     type;
 
   MagickBooleanType
@@ -1030,17 +1029,12 @@ static MagickBooleanType EncodeImageAttributes(Image *image,FILE *file,
     }
   JSONFormatLocaleFile(file,"    \"units\": %s,\n",CommandOptionToMnemonic(
     MagickResolutionOptions,(ssize_t) image->units));
-  colorspace=image->colorspace;
-  type=IdentifyImageType(image,exception);
-  if ((type == BilevelType) || (type == GrayscaleType) ||
-      (type == GrayscaleAlphaType))
-    colorspace=GRAYColorspace;
+  type=GetImageType(image);
   JSONFormatLocaleFile(file,"    \"type\": %s,\n",CommandOptionToMnemonic(
     MagickTypeOptions,(ssize_t) type));
-  base_type=GetImageType(image);
-  if (type != base_type)
+  if (image->type != type)
     JSONFormatLocaleFile(file,"    \"baseType\": %s,\n",
-      CommandOptionToMnemonic(MagickTypeOptions,(ssize_t) base_type));
+      CommandOptionToMnemonic(MagickTypeOptions,(ssize_t) image->type));
   JSONFormatLocaleFile(file,"    \"endianess\": %s,\n",
     CommandOptionToMnemonic(MagickEndianOptions,(ssize_t) image->endian));
   locate=GetImageArtifact(image,"identify:locate");
@@ -1075,6 +1069,7 @@ static MagickBooleanType EncodeImageAttributes(Image *image,FILE *file,
       if (image->alpha_trait != UndefinedPixelTrait)
         (void) PrintChannelLocations(file,image,AlphaPixelChannel,"Alpha",
           type,max_locations,MagickTrue,channel_statistics);
+      colorspace=GetImageColorspaceType(image,exception);
       switch (colorspace)
       {
         case RGBColorspace:
@@ -1114,8 +1109,13 @@ static MagickBooleanType EncodeImageAttributes(Image *image,FILE *file,
   /*
     Detail channel depth and extrema.
   */
+  colorspace=GetImageColorspaceType(image,exception);
   JSONFormatLocaleFile(file,"    \"colorspace\": %s,\n",
     CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t) colorspace));
+  if (image->colorspace != colorspace)
+    JSONFormatLocaleFile(file,"    \"baseColorspace\": %s,\n",
+      CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
+        image->colorspace));
   channel_statistics=(ChannelStatistics *) NULL;
   channel_moments=(ChannelMoments *) NULL;
   channel_phash=(ChannelPerceptualHash *) NULL;