#include "MagickCore/quantum-private.h"
#include "MagickCore/static.h"
#include "MagickCore/string_.h"
+#include "MagickCore/string-private.h"
#include "MagickCore/module.h"
\f
/*
/*
GIF Extension block.
*/
-
count=ReadBlob(image,1,&c);
if (count != 1)
{
MagickBooleanType
i8bim,
icc,
- iptc;
+ iptc,
+ magick;
StringInfo
*profile;
/*
Store GIF application extension as a generic profile.
*/
- i8bim=LocaleNCompare((char *) header,"MGK8BIM0000",11) == 0 ?
- MagickTrue : MagickFalse;
icc=LocaleNCompare((char *) header,"ICCRGBG1012",11) == 0 ?
MagickTrue : MagickFalse;
+ magick=LocaleNCompare((char *) header,"ImageMagick",11) == 0 ?
+ MagickTrue : MagickFalse;
+ i8bim=LocaleNCompare((char *) header,"MGK8BIM0000",11) == 0 ?
+ MagickTrue : MagickFalse;
iptc=LocaleNCompare((char *) header,"MGKIPTC0000",11) == 0 ?
MagickTrue : MagickFalse;
number_extensionss++;
if (profile == (StringInfo *) NULL)
ThrowReaderException(ResourceLimitError,
"MemoryAllocationFailed");
- info=(unsigned char *) RelinquishMagickMemory(info);
if (i8bim == MagickTrue)
(void) CopyMagickString(name,"8bim",sizeof(name));
else if (icc == MagickTrue)
(void) CopyMagickString(name,"icc",sizeof(name));
else if (iptc == MagickTrue)
(void) CopyMagickString(name,"iptc",sizeof(name));
+ else if (magick == MagickTrue)
+ {
+ (void) CopyMagickString(name,"magick",sizeof(name));
+ image->gamma=StringToDouble((char *) info+6,(char **) NULL);
+ }
else
(void) FormatLocaleString(name,sizeof(name),"gif:%.11s",
header);
- (void) SetImageProfile(image,name,profile,exception);
+ info=(unsigned char *) RelinquishMagickMemory(info);
+ if (magick == MagickFalse)
+ (void) SetImageProfile(image,name,profile,exception);
profile=DestroyStringInfo(profile);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
" profile name=%s",name);
}
colormap=(unsigned char *) RelinquishMagickMemory(colormap);
}
+ if (image->gamma == 1.0)
+ {
+ for (i=0; i < (ssize_t) image->colors; i++)
+ if (IsPixelInfoGray(image->colormap+i) == MagickFalse)
+ break;
+ (void) SetImageColorspace(image,i == (ssize_t) image->colors ?
+ GRAYColorspace : RGBColorspace,exception);
+ }
if ((image_info->ping != MagickFalse) && (image_info->number_scenes != 0))
if (image->scene >= (image_info->scene+image_info->number_scenes-1))
break;
one=1;
do
{
- if (IssRGBColorspace(image->colorspace) == MagickFalse)
+ if (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse)
(void) TransformImageColorspace(image,sRGBColorspace,exception);
opacity=(-1);
if (IsImageOpaque(image,exception) != MagickFalse)
count;
/*
- Write Comment extension.
- */
+ Write comment extension.
+ */
(void) WriteBlobByte(image,(unsigned char) 0x21);
(void) WriteBlobByte(image,(unsigned char) 0xfe);
- value=GetImageProperty(image,"comment");
+ value=GetImageProperty(image,"comment",exception);
for (p=value; *p != '\0'; )
{
count=MagickMin(strlen(p),255);
(void) WriteBlobLSBShort(image,(unsigned short) image->iterations);
(void) WriteBlobByte(image,(unsigned char) 0x00);
}
+ if ((image->gamma != 1.0f/2.2f))
+ {
+ char
+ attributes[MaxTextExtent];
+
+ ssize_t
+ length;
+
+ /*
+ Write ImageMagick extension.
+ */
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ " Writing GIF Extension %s","ImageMagick");
+ (void) WriteBlobByte(image,(unsigned char) 0x21);
+ (void) WriteBlobByte(image,(unsigned char) 0xff);
+ (void) WriteBlobByte(image,(unsigned char) 0x0b);
+ (void) WriteBlob(image,11,(unsigned char *) "ImageMagick");
+ length=FormatLocaleString(attributes,MaxTextExtent,"gamma=%g",
+ image->gamma);
+ (void) WriteBlobByte(image,(unsigned char) length);
+ (void) WriteBlob(image,length,(unsigned char *) attributes);
+ (void) WriteBlobByte(image,(unsigned char) 0x00);
+ }
ResetImageProfileIterator(image);
for ( ; ; )
{
/*
Write ICC extension.
*/
- (void) WriteBlob(image,11,(unsigned char *)"ICCRGBG1012");
+ (void) WriteBlob(image,11,(unsigned char *) "ICCRGBG1012");
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
" Writing GIF Extension %s","ICCRGBG1012");
}
if ((LocaleCompare(name,"IPTC") == 0))
{
/*
- write IPTC extension.
+ Write IPTC extension.
*/
- (void) WriteBlob(image,11,(unsigned char *)"MGKIPTC0000");
+ (void) WriteBlob(image,11,(unsigned char *) "MGKIPTC0000");
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
" Writing GIF Extension %s","MGKIPTC0000");
}
if ((LocaleCompare(name,"8BIM") == 0))
{
/*
- Write 8BIM extension>
+ Write 8BIM extension.
*/
(void) WriteBlob(image,11,(unsigned char *)
"MGK8BIM0000");
char
extension[MaxTextExtent];
- /* write generic extension */
+ /*
+ Write generic extension.
+ */
(void) CopyMagickString(extension,name+4,
sizeof(extension));
(void) WriteBlob(image,11,(unsigned char *) extension);