diff --git a/MagickCore/colorspace.c b/MagickCore/colorspace.c index f9bcf5d038..575b03deb3 100644 --- a/MagickCore/colorspace.c +++ b/MagickCore/colorspace.c @@ -1500,9 +1500,6 @@ MagickExport MagickBooleanType SetImageColorspace(Image *image, MagickExport MagickBooleanType SetImageGray(Image *image, ExceptionInfo *exception) { - const char - *value; - ImageType type; @@ -1514,9 +1511,6 @@ MagickExport MagickBooleanType SetImageGray(Image *image, return(MagickTrue); if (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse) return(MagickFalse); - value=GetImageProperty(image,"colorspace:auto-grayscale",exception); - if (IsStringFalse(value) != MagickFalse) - return(MagickFalse); type=IdentifyImageGray(image,exception); if (type == UndefinedType) return(MagickFalse); @@ -1557,26 +1551,24 @@ MagickExport MagickBooleanType SetImageGray(Image *image, MagickExport MagickBooleanType SetImageMonochrome(Image *image, ExceptionInfo *exception) { - const char - *value; + ImageType + type; assert(image != (Image *) NULL); assert(image->signature == MagickCoreSignature); if (image->debug != MagickFalse) (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); - if (image->type == BilevelType) + if (IsImageMonochrome(image) != MagickFalse) return(MagickTrue); if (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse) return(MagickFalse); - value=GetImageProperty(image,"colorspace:auto-grayscale",exception); - if (IsStringFalse(value) != MagickFalse) - return(MagickFalse); - if (IdentifyImageMonochrome(image,exception) == MagickFalse) + type=IdentifyImageMonochrome(image,exception); + if (type == UndefinedType) return(MagickFalse); image->colorspace=GRAYColorspace; if (SyncImagePixelCache((Image *) image,exception) == MagickFalse) return(MagickFalse); - image->type=BilevelType; + image->type=type; return(MagickTrue); } diff --git a/coders/coders-private.h b/coders/coders-private.h index 867ab7c74f..3ea8d4b35b 100644 --- a/coders/coders-private.h +++ b/coders/coders-private.h @@ -16,6 +16,10 @@ #ifndef MAGICK_CODERS_PRIVATE_H #define MAGICK_CODERS_PRIVATE_H +#include "MagickCore/attribute.h" +#include "MagickCore/property.h" +#include "MagickCore/string_.h" + #define MagickCoderHeader(coder,offset,magic) { coder, offset, \ (const unsigned char *) (magic), sizeof(magic)-1 }, @@ -27,4 +31,22 @@ extern ModuleExport size_t \ extern ModuleExport void \ Unregister ## coder ## Image(void); +static inline ImageType IdentifyImageCoderType(const Image *image, + ExceptionInfo *exception) +{ + const char + *value; + + ImageType + type; + + type=IdentifyImageType(image,exception); + if ((type != GrayscaleType) && (type != BilevelType)) + return(type); + value=GetImageProperty(image,"colorspace:auto-grayscale",exception); + if (IsStringFalse(value) == MagickFalse) + return(type); + return(TrueColorType); +} + #endif diff --git a/coders/jpeg.c b/coders/jpeg.c index 02a2af21b1..9a65252639 100644 --- a/coders/jpeg.c +++ b/coders/jpeg.c @@ -85,6 +85,7 @@ #include "MagickCore/utility.h" #include "MagickCore/xml-tree.h" #include "MagickCore/xml-tree-private.h" +#include "coders/coders-private.h" #include #if defined(MAGICKCORE_JPEG_DELEGATE) #define JPEG_INTERNAL_OPTIONS @@ -340,8 +341,8 @@ static void JPEGErrorHandler(j_common_ptr jpeg_info) (void) LogMagickEvent(CoderEvent,GetMagickModule(), "[%s] JPEG Trace: \"%s\"",image->filename,message); if (client_info->finished != MagickFalse) - (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageWarning, - (char *) message,"`%s'",image->filename); + (void) ThrowMagickException(exception,GetMagickModule(), + CorruptImageWarning,(char *) message,"`%s'",image->filename); else (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError, (char *) message,"`%s'",image->filename); @@ -2340,7 +2341,7 @@ static MagickBooleanType WriteJPEGImage_(const ImageInfo *image_info, (void) TransformImageColorspace(image,sRGBColorspace,exception); if (image_info->type == TrueColorType) break; - type=IdentifyImageType(image,exception); + type=IdentifyImageCoderType(image,exception); if ((type == GrayscaleType) || (type == BilevelType)) { jpeg_info->input_components=1; diff --git a/coders/json.c b/coders/json.c index 27e929b4c3..c72cf2c0e1 100644 --- a/coders/json.c +++ b/coders/json.c @@ -74,6 +74,7 @@ #include "MagickCore/utility.h" #include "MagickCore/version.h" #include "MagickCore/module.h" +#include "coders/coders-private.h" /* Typedef declarations. @@ -1039,7 +1040,7 @@ static MagickBooleanType EncodeImageAttributes(Image *image,FILE *file, } JSONFormatLocaleFile(file," \"units\": %s,\n",CommandOptionToMnemonic( MagickResolutionOptions,(ssize_t) image->units)); - type=IdentifyImageType(image,exception); + type=IdentifyImageCoderType(image,exception); JSONFormatLocaleFile(file," \"type\": %s,\n",CommandOptionToMnemonic( MagickTypeOptions,(ssize_t) type)); if (image->type != type) diff --git a/coders/png.c b/coders/png.c index ab554bb544..37518458a0 100644 --- a/coders/png.c +++ b/coders/png.c @@ -90,6 +90,7 @@ #include "MagickCore/timer-private.h" #include "MagickCore/transform.h" #include "MagickCore/utility.h" +#include "coders/coders-private.h" #if defined(MAGICKCORE_PNG_DELEGATE) /* Suppress libpng pedantic warnings that were added in @@ -12884,7 +12885,7 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info, if ((image_info->type != TrueColorAlphaType) && (image_info->type != TrueColorType)) { - ImageType type = IdentifyImageType(image,exception); + ImageType type = IdentifyImageCoderType(image,exception); if ((type == GrayscaleType) || (type == BilevelType)) jng_color_type-=2; } @@ -13667,7 +13668,7 @@ static MagickBooleanType WriteMNGImage(const ImageInfo *image_info, if (need_local_plte == 0) { - ImageType type = IdentifyImageType(image,exception); + ImageType type = IdentifyImageCoderType(image,exception); if ((type != GrayscaleType) && (type != BilevelType)) all_images_are_gray=MagickFalse; mng_info->equal_palettes=PalettesAreEqual(image,next_image); diff --git a/coders/pnm.c b/coders/pnm.c index 331c73d6ce..f33143c49d 100644 --- a/coders/pnm.c +++ b/coders/pnm.c @@ -65,6 +65,7 @@ #include "MagickCore/statistic.h" #include "MagickCore/string_.h" #include "MagickCore/string-private.h" +#include "coders/coders-private.h" /* Typedef declarations. @@ -1710,7 +1711,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image, format='F'; if (image_info->type == TrueColorType) break; - if (IdentifyImageType(image,exception) == GrayscaleType) + if (IdentifyImageCoderType(image,exception) == GrayscaleType) format='f'; break; } @@ -1728,7 +1729,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image, format='H'; if (image_info->type == TrueColorType) break; - if (IdentifyImageType(image,exception) == GrayscaleType) + if (IdentifyImageCoderType(image,exception) == GrayscaleType) format='h'; break; } @@ -1741,7 +1742,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image, format='6'; if (image_info->type == TrueColorType) break; - type=IdentifyImageType(image,exception); + type=IdentifyImageCoderType(image,exception); if (type == GrayscaleType) { format='5'; diff --git a/coders/ps.c b/coders/ps.c index 7f43a7e11b..e97fdc464a 100644 --- a/coders/ps.c +++ b/coders/ps.c @@ -79,6 +79,7 @@ #include "MagickCore/transform.h" #include "MagickCore/utility.h" #include "coders/bytebuffer-private.h" +#include "coders/coders-private.h" #include "coders/ghostscript-private.h" /* @@ -1766,7 +1767,7 @@ static MagickBooleanType WritePSImage(const ImageInfo *image_info,Image *image, index=(Quantum) 0; x=0; if (image_info->type != TrueColorType) - type=IdentifyImageType(image,exception); + type=IdentifyImageCoderType(image,exception); if ((type == GrayscaleType) || (type == BilevelType)) { if (type == GrayscaleType) diff --git a/coders/tiff.c b/coders/tiff.c index da44924a2e..246697f13b 100644 --- a/coders/tiff.c +++ b/coders/tiff.c @@ -87,7 +87,8 @@ #include "MagickCore/thread_.h" #include "MagickCore/token.h" #include "MagickCore/utility.h" -#include "psd-private.h" +#include "coders/coders-private.h" +#include "coders/psd-private.h" #if defined(MAGICKCORE_TIFF_DELEGATE) # if defined(MAGICKCORE_HAVE_TIFFCONF_H) # include @@ -3595,7 +3596,7 @@ static MagickBooleanType WriteTIFFImage(const ImageInfo *image_info, ImageType type; - type=IdentifyImageType(image,exception); + type=IdentifyImageCoderType(image,exception); if ((image_info->type != PaletteType) && ((type == GrayscaleType) || (type == BilevelType))) { diff --git a/coders/xpm.c b/coders/xpm.c index 172879163d..9c2e87985a 100644 --- a/coders/xpm.c +++ b/coders/xpm.c @@ -44,6 +44,7 @@ #include "MagickCore/blob.h" #include "MagickCore/blob-private.h" #include "MagickCore/cache.h" +#include "MagickCore/coder-private.h" #include "MagickCore/color.h" #include "MagickCore/color-private.h" #include "MagickCore/colormap.h" @@ -70,6 +71,7 @@ #include "MagickCore/module.h" #include "MagickCore/threshold.h" #include "MagickCore/utility.h" +#include "coders/coders-private.h" /* Global declarations. @@ -730,7 +732,7 @@ static MagickBooleanType WritePICONImage(const ImageInfo *image_info, blob_info=CloneImageInfo(image_info); *blob_info->magick='\0'; (void) AcquireUniqueFilename(blob_info->filename); - type=IdentifyImageType(image,exception); + type=IdentifyImageCoderType(image,exception); if ((image_info->type != TrueColorType) && ((type == GrayscaleType) || (type == BilevelType))) affinity_image=BlobToImage(blob_info,Graymap,GraymapExtent,exception); diff --git a/coders/yaml.c b/coders/yaml.c index d68cfc025b..08f0b7fcda 100644 --- a/coders/yaml.c +++ b/coders/yaml.c @@ -74,6 +74,7 @@ #include "MagickCore/utility.h" #include "MagickCore/version.h" #include "MagickCore/module.h" +#include "coders/coders-private.h" /* Typedef declarations. @@ -1037,7 +1038,7 @@ static MagickBooleanType EncodeImageAttributes(Image *image,FILE *file, } YAMLFormatLocaleFile(file," units: %s\n",CommandOptionToMnemonic( MagickResolutionOptions,(ssize_t) image->units)); - type=IdentifyImageType(image,exception); + type=IdentifyImageCoderType(image,exception); YAMLFormatLocaleFile(file," type: %s\n",CommandOptionToMnemonic( MagickTypeOptions,(ssize_t) type)); if (image->type != type)