]> granicus.if.org Git - imagemagick/commitdiff
Improved reporting of the format by also using the extension when possible and added...
authordirk <dirk@git.imagemagick.org>
Sun, 22 Feb 2015 01:19:21 +0000 (01:19 +0000)
committerdirk <dirk@git.imagemagick.org>
Sun, 22 Feb 2015 01:19:21 +0000 (01:19 +0000)
MagickCore/image.c
MagickCore/magick.c
MagickCore/magick.h
coders/jpeg.c

index c136943a24ad51e028edc9d82ca4e95c6f7b1a63..8e1ad6a94bce6fe161e93f453de2a08cd618dff1 100644 (file)
@@ -2630,9 +2630,21 @@ MagickExport MagickBooleanType SetImageInfo(ImageInfo *image_info,
       if ((magic_info != (const MagicInfo *) NULL) &&
           (GetMagicName(magic_info) != (char *) NULL))
         {
-          (void) CopyMagickString(image_info->magick,GetMagicName(magic_info),
-            MaxTextExtent);
-          magick_info=GetMagickInfo(image_info->magick,sans_exception);
+          /*
+            Try to use magick_info that was determined earlier by the extension
+          */
+          if ((magick_info != (const MagickInfo *) NULL) &&
+              (GetMagickUseExtension(magick_info) != MagickFalse) &&
+              (LocaleCompare(magick_info->module,GetMagicName(
+                magic_info)) == 0))
+            (void) CopyMagickString(image_info->magick,magick_info->name,
+              MaxTextExtent);
+          else
+            {
+              (void) CopyMagickString(image_info->magick,GetMagicName(
+                magic_info),MaxTextExtent);
+              magick_info=GetMagickInfo(image_info->magick,sans_exception);
+            }
           if ((magick_info == (const MagickInfo *) NULL) ||
               (GetMagickEndianSupport(magick_info) == MagickFalse))
             image_info->endian=UndefinedEndian;
index 744215072a5d263a9916af313732d43f77d3ab56..884ccc0806b82c1705f388155277a6d101ebde9a 100644 (file)
@@ -848,6 +848,39 @@ MagickExport MagickBooleanType GetMagickStealth(const MagickInfo *magick_info)
   assert(magick_info->signature == MagickSignature);
   return(((magick_info->flags & Stealth) == 0) ? MagickFalse : MagickTrue);
 }
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
++   G e t M a g i c k U s e E x t e n s i o n                                 %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  GetMagickUseExtension() returns MagickTrue if the magick can use the
+%  extension of the format if the format return by IsImageFormatHandler uses
+%  the same coder.
+%
+%  The format of the GetMagickUseExtension method is:
+%
+%      MagickBooleanType GetMagickUseExtension(const MagickInfo *magick_info)
+%
+%  A description of each parameter follows:
+%
+%    o magick_info:  The magick info.
+%
+*/
+MagickExport MagickBooleanType GetMagickUseExtension(
+  const MagickInfo *magick_info)
+{
+  assert(magick_info != (MagickInfo *) NULL);
+  assert(magick_info->signature == MagickSignature);
+  return(((magick_info->flags & UseExtension) == 0) ? MagickFalse :
+    MagickTrue);
+}
 \f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1558,7 +1591,7 @@ MagickExport MagickInfo *SetMagickInfo(const char *name)
   (void) ResetMagickMemory(magick_info,0,sizeof(*magick_info));
   magick_info->name=ConstantString(name);
   magick_info->flags=Adjoin | BlobSupport | DecoderThreadSupport |
-    EncoderThreadSupport;
+    EncoderThreadSupport | UseExtension;
   magick_info->signature=MagickSignature;
   return(magick_info);
 }
index a0b1012ed872d4c085f1ba0aa0ff8f31879335d5..d0c9e47f1759f989b8062f30bee3d36ae7273d2d 100644 (file)
@@ -42,7 +42,8 @@ typedef enum
   EndianSupport = 0x0010,
   RawSupport = 0x0020,
   SeekableStream = 0x0040,
-  Stealth = 0x0080
+  Stealth = 0x0080,
+  UseExtension = 0x0100
 } MagickFlagType;
 
 typedef Image
@@ -119,6 +120,7 @@ extern MagickExport MagickBooleanType
   GetMagickRawSupport(const MagickInfo *),
   GetMagickSeekableStream(const MagickInfo *),
   GetMagickStealth(const MagickInfo *),
+  GetMagickUseExtension(const MagickInfo *),
   IsMagickCoreInstantiated(void),
   UnregisterMagickInfo(const char *);
 
index 5005aa1a02782be97c8486a7fd181ba4caba0227..3d856130d954643d29c84e542b79bf93614b8839 100644 (file)
@@ -1536,6 +1536,7 @@ ModuleExport size_t RegisterJPEGImage(void)
 #endif
   entry->magick=(IsImageFormatHandler *) IsJPEG;
   entry->flags^=Adjoin;
+  entry->flags^=UseExtension;
   entry->description=ConstantString(description);
   if (*version != '\0')
     entry->version=ConstantString(version);
@@ -1567,6 +1568,7 @@ ModuleExport size_t RegisterJPEGImage(void)
   entry->encoder=(EncodeImageHandler *) WriteJPEGImage;
 #endif
   entry->flags^=Adjoin;
+  entry->flags^=UseExtension;
   entry->description=ConstantString(description);
   if (*version != '\0')
     entry->version=ConstantString(version);
@@ -1582,6 +1584,7 @@ ModuleExport size_t RegisterJPEGImage(void)
   entry->encoder=(EncodeImageHandler *) WriteJPEGImage;
 #endif
   entry->flags^=Adjoin;
+  entry->flags^=UseExtension;
   entry->description=ConstantString(description);
   if (*version != '\0')
     entry->version=ConstantString(version);
@@ -1597,6 +1600,7 @@ ModuleExport size_t RegisterJPEGImage(void)
   entry->encoder=(EncodeImageHandler *) WriteJPEGImage;
 #endif
   entry->flags^=Adjoin;
+  entry->flags^=UseExtension;
   entry->description=ConstantString(description);
   if (*version != '\0')
     entry->version=ConstantString(version);