• Home
  • History
  • Annotate
  • Raw
  • Download

Lines Matching +full:- +full:- +full:with +full:- +full:quantum +full:- +full:depth

23 %  Copyright 1999-2019 ImageMagick Studio LLC, a non-profit organization      %
26 % You may not use this file except in compliance with the License. You may %
39 % Photoshop spec @ https://www.adobe.com/devnet-apps/photoshop/fileformatashtml
50 #include "MagickCore/blob-private.h"
54 #include "MagickCore/colormap-private.h"
56 #include "MagickCore/colorspace-private.h"
60 #include "MagickCore/exception-private.h"
62 #include "MagickCore/image-private.h"
68 #include "MagickCore/monitor-private.h"
71 #include "MagickCore/pixel-accessor.h"
76 #include "MagickCore/quantum-private.h"
79 #include "MagickCore/string-private.h"
80 #include "MagickCore/thread-private.h"
84 #include "psd-private.h"
90 #define PSDQuantum(x) (((ssize_t) (x)+1) & -2)
154 Quantum
246 switch (image->compose) in CompositeOperatorToPSDBlendMode()
249 return(image->endian == LSBEndian ? "vidi" : "idiv"); in CompositeOperatorToPSDBlendMode()
251 return(image->endian == LSBEndian ? " vid" : "div "); in CompositeOperatorToPSDBlendMode()
253 return(image->endian == LSBEndian ? "rloc" : "colr"); in CompositeOperatorToPSDBlendMode()
255 return(image->endian == LSBEndian ? "krad" : "dark"); in CompositeOperatorToPSDBlendMode()
257 return(image->endian == LSBEndian ? "ffid" : "diff"); in CompositeOperatorToPSDBlendMode()
259 return(image->endian == LSBEndian ? "ssid" : "diss"); in CompositeOperatorToPSDBlendMode()
261 return(image->endian == LSBEndian ? "dums" : "smud"); in CompositeOperatorToPSDBlendMode()
263 return(image->endian == LSBEndian ? "tiLh" : "hLit"); in CompositeOperatorToPSDBlendMode()
265 return(image->endian == LSBEndian ? "xiMh" : "hMix"); in CompositeOperatorToPSDBlendMode()
267 return(image->endian == LSBEndian ? " euh" : "hue "); in CompositeOperatorToPSDBlendMode()
269 return(image->endian == LSBEndian ? "etil" : "lite"); in CompositeOperatorToPSDBlendMode()
271 return(image->endian == LSBEndian ? "nrbl" : "lbrn"); in CompositeOperatorToPSDBlendMode()
273 return(image->endian == LSBEndian ? "gddl" : "lddg"); in CompositeOperatorToPSDBlendMode()
275 return(image->endian == LSBEndian ? "tiLl" : "lLit"); in CompositeOperatorToPSDBlendMode()
277 return(image->endian == LSBEndian ? " mul" : "lum "); in CompositeOperatorToPSDBlendMode()
279 return(image->endian == LSBEndian ? " lum" : "mul "); in CompositeOperatorToPSDBlendMode()
281 return(image->endian == LSBEndian ? "revo" : "over"); in CompositeOperatorToPSDBlendMode()
283 return(image->endian == LSBEndian ? "tiLp" : "pLit"); in CompositeOperatorToPSDBlendMode()
285 return(image->endian == LSBEndian ? " tas" : "sat "); in CompositeOperatorToPSDBlendMode()
287 return(image->endian == LSBEndian ? "nrcs" : "scrn"); in CompositeOperatorToPSDBlendMode()
289 return(image->endian == LSBEndian ? "tiLs" : "sLit"); in CompositeOperatorToPSDBlendMode()
291 return(image->endian == LSBEndian ? "tiLv" : "vLit"); in CompositeOperatorToPSDBlendMode()
294 return(image->endian == LSBEndian ? "mron" : "norm"); in CompositeOperatorToPSDBlendMode()
299 For some reason Photoshop seems to blend semi-transparent pixels with white.
301 option 'psd:alpha-unblend' to off.
315 if (image->alpha_trait != BlendPixelTrait || image->colorspace != sRGBColorspace) in CorrectPSDAlphaBlend()
317 option=GetImageOption(image_info,"psd:alpha-unblend"); in CorrectPSDAlphaBlend()
323 magick_number_threads(image,image,image->rows,1) in CorrectPSDAlphaBlend()
325 for (y=0; y < (ssize_t) image->rows; y++) in CorrectPSDAlphaBlend()
327 register Quantum in CorrectPSDAlphaBlend()
335 q=GetAuthenticPixels(image,0,y,image->columns,1,exception); in CorrectPSDAlphaBlend()
336 if (q == (Quantum *) NULL) in CorrectPSDAlphaBlend()
341 for (x=0; x < (ssize_t) image->columns; x++) in CorrectPSDAlphaBlend()
356 q[i]=ClampToQuantum((q[i]-((1.0-gamma)*QuantumRange))/gamma); in CorrectPSDAlphaBlend()
383 static MagickBooleanType ApplyPSDLayerOpacity(Image *image,Quantum opacity, in ApplyPSDLayerOpacity()
392 if (image->debug != MagickFalse) in ApplyPSDLayerOpacity()
397 if (image->alpha_trait != BlendPixelTrait) in ApplyPSDLayerOpacity()
402 magick_number_threads(image,image,image->rows,1) in ApplyPSDLayerOpacity()
404 for (y=0; y < (ssize_t) image->rows; y++) in ApplyPSDLayerOpacity()
406 register Quantum in ApplyPSDLayerOpacity()
414 q=GetAuthenticPixels(image,0,y,image->columns,1,exception); in ApplyPSDLayerOpacity()
415 if (q == (Quantum *) NULL) in ApplyPSDLayerOpacity()
420 for (x=0; x < (ssize_t) image->columns; x++) in ApplyPSDLayerOpacity()
423 SetPixelAlpha(image,(Quantum) (QuantumScale*(GetPixelAlpha(image,q))* in ApplyPSDLayerOpacity()
426 SetPixelAlpha(image,(Quantum) (QuantumRange*(GetPixelAlpha(image,q)/ in ApplyPSDLayerOpacity()
438 Quantum background,MagickBooleanType revert,ExceptionInfo *exception) in ApplyPSDOpacityMask()
452 if (image->alpha_trait == UndefinedPixelTrait) in ApplyPSDOpacityMask()
454 if (image->debug != MagickFalse) in ApplyPSDOpacityMask()
460 complete_mask->alpha_trait=BlendPixelTrait; in ApplyPSDOpacityMask()
465 mask->page.x-image->page.x,mask->page.y-image->page.y,exception); in ApplyPSDOpacityMask()
474 magick_number_threads(image,image,image->rows,1) in ApplyPSDOpacityMask()
476 for (y=0; y < (ssize_t) image->rows; y++) in ApplyPSDOpacityMask()
478 register Quantum in ApplyPSDOpacityMask()
481 register Quantum in ApplyPSDOpacityMask()
489 q=GetAuthenticPixels(image,0,y,image->columns,1,exception); in ApplyPSDOpacityMask()
490 p=GetAuthenticPixels(complete_mask,0,y,complete_mask->columns,1,exception); in ApplyPSDOpacityMask()
491 if ((q == (Quantum *) NULL) || (p == (Quantum *) NULL)) in ApplyPSDOpacityMask()
496 for (x=0; x < (ssize_t) image->columns; x++) in ApplyPSDOpacityMask()
530 if (image->debug != MagickFalse) in PreservePSDOpacityMask()
536 key[8]=(char ) layer_info->mask.background; in PreservePSDOpacityMask()
538 layer_info->mask.image->page.x+=layer_info->page.x; in PreservePSDOpacityMask()
539 layer_info->mask.image->page.y+=layer_info->page.y; in PreservePSDOpacityMask()
541 layer_info->mask.image,exception); in PreservePSDOpacityMask()
542 (void) SetImageArtifact(layer_info->image,"psd:opacity-mask", in PreservePSDOpacityMask()
549 const unsigned char *compact_pixels,const ssize_t depth, in DecodePSDPixels() argument
555 packets-- in DecodePSDPixels()
578 packets--; in DecodePSDPixels()
584 length=256-length+1; in DecodePSDPixels()
589 switch (depth) in DecodePSDPixels()
634 switch (depth) in DecodePSDPixels()
699 if (image->storage_class == PseudoClass) in GetPSDPacketSize()
701 if (image->colors > 256) in GetPSDPacketSize()
704 if (image->depth > 16) in GetPSDPacketSize()
706 if (image->depth > 8) in GetPSDPacketSize()
714 if (psd_info->version == 1) in GetPSDSize()
721 if (image->depth == 1) in GetPSDRowSize()
722 return(((image->columns+7)/8)*GetPSDPacketSize(image)); in GetPSDRowSize()
724 return(image->columns*GetPSDPacketSize(image)); in GetPSDRowSize()
786 for (p=blocks; (p >= blocks) && (p < (blocks+length-7)); ) in ParseImageResourceBlocks()
796 if (p > (blocks+length-4)) in ParseImageResourceBlocks()
818 image->resolution.x=(double) resolution; in ParseImageResourceBlocks()
820 image->resolution.x); in ParseImageResourceBlocks()
826 image->resolution.y=(double) resolution; in ParseImageResourceBlocks()
828 image->resolution.y); in ParseImageResourceBlocks()
833 image->units=PixelsPerInchResolution; in ParseImageResourceBlocks()
913 if (image->endian == MSBEndian) in ReversePSDString()
917 for(--q; p < q; ++p, --q) in ReversePSDString()
926 const ssize_t type,const size_t packet_size,const Quantum pixel,Quantum *q, in SetPSDPixel()
929 if (image->storage_class == PseudoClass) in SetPSDPixel()
941 color=image->colormap+(ssize_t) ConstrainColormapIndex(image, in SetPSDPixel()
946 color->alpha=(MagickRealType) pixel; in SetPSDPixel()
952 case -1: in SetPSDPixel()
957 case -2: in SetPSDPixel()
963 case -3: in SetPSDPixel()
969 case -4: in SetPSDPixel()
977 if (image->colorspace == CMYKColorspace) in SetPSDPixel()
980 if (image->alpha_trait != UndefinedPixelTrait) in SetPSDPixel()
986 if ((IssRGBCompatibleColorspace(image->colorspace) != MagickFalse) && in SetPSDPixel()
989 if (image->alpha_trait != UndefinedPixelTrait) in SetPSDPixel()
1000 Quantum in ReadPSDChannelPixels()
1006 register Quantum in ReadPSDChannelPixels()
1016 q=GetAuthenticPixels(image,0,row,image->columns,1,exception); in ReadPSDChannelPixels()
1017 if (q == (Quantum *) NULL) in ReadPSDChannelPixels()
1020 for (x=0; x < (ssize_t) image->columns; x++) in ReadPSDChannelPixels()
1040 if (image->depth > 1) in ReadPSDChannelPixels()
1051 number_bits=(ssize_t) image->columns-x; in ReadPSDChannelPixels()
1057 & (0x01 << (7-bit))) != 0 ? 0 : QuantumRange,q,exception); in ReadPSDChannelPixels()
1061 if (x != (ssize_t) image->columns) in ReadPSDChannelPixels()
1062 x--; in ReadPSDChannelPixels()
1085 if (image->debug != MagickFalse) in ReadPSDChannelRaw()
1093 image->filename); in ReadPSDChannelRaw()
1096 for (y=0; y < (ssize_t) image->rows; y++) in ReadPSDChannelRaw()
1130 if (psd_info->version == 1) in ReadPSDRLESizes()
1157 if (image->debug != MagickFalse) in ReadPSDChannelRLE()
1165 image->filename); in ReadPSDChannelRLE()
1168 for (y=0; y < (ssize_t) image->rows; y++) in ReadPSDChannelRLE()
1175 ThrowBinaryException(ResourceLimitError,"InvalidLength",image->filename); in ReadPSDChannelRLE()
1183 image->filename); in ReadPSDChannelRLE()
1189 for (y=0; y < (ssize_t) image->rows; y++) in ReadPSDChannelRLE()
1198 (ssize_t) (image->depth == 1 ? 123456 : image->depth),row_size,pixels); in ReadPSDChannelRLE()
1202 status=ReadPSDChannelPixels(image,psd_info->channels,y,type,pixels, in ReadPSDChannelRLE()
1240 if (image->debug != MagickFalse) in ReadPSDChannelZip()
1246 image->filename); in ReadPSDChannelZip()
1251 image->filename); in ReadPSDChannelZip()
1254 row_size=image->columns*packet_size; in ReadPSDChannelZip()
1255 count=image->rows*row_size; in ReadPSDChannelZip()
1262 image->filename); in ReadPSDChannelZip()
1269 image->filename); in ReadPSDChannelZip()
1306 length=image->columns; in ReadPSDChannelZip()
1307 while (--length) in ReadPSDChannelZip()
1325 count-=row_size; in ReadPSDChannelZip()
1331 for (y=0; y < (ssize_t) image->rows; y++) in ReadPSDChannelZip()
1363 if ((layer_info->channel_info[channel].type < -1) && in ReadPSDChannel()
1364 (layer_info->mask.page.width > 0) && (layer_info->mask.page.height > 0)) in ReadPSDChannel()
1373 option=GetImageOption(image_info,"psd:preserve-opacity-mask"); in ReadPSDChannel()
1374 if ((layer_info->channel_info[channel].type != -2) || in ReadPSDChannel()
1375 (layer_info->mask.flags > 2) || ((layer_info->mask.flags & 0x02) && in ReadPSDChannel()
1379 layer_info->channel_info[channel].size-2,SEEK_CUR); in ReadPSDChannel()
1382 mask=CloneImage(image,layer_info->mask.page.width, in ReadPSDChannel()
1383 layer_info->mask.page.height,MagickFalse,exception); in ReadPSDChannel()
1396 status=ReadPSDChannelRaw(channel_image,psd_info->channels, in ReadPSDChannel()
1397 (ssize_t) layer_info->channel_info[channel].type,exception); in ReadPSDChannel()
1404 sizes=ReadPSDRLESizes(channel_image,psd_info,channel_image->rows); in ReadPSDChannel()
1407 image->filename); in ReadPSDChannel()
1409 (ssize_t) layer_info->channel_info[channel].type,sizes,exception); in ReadPSDChannel()
1416 status=ReadPSDChannelZip(channel_image,layer_info->channels, in ReadPSDChannel()
1417 (ssize_t) layer_info->channel_info[channel].type,compression, in ReadPSDChannel()
1418 layer_info->channel_info[channel].size-2,exception); in ReadPSDChannel()
1422 "'%s' (ZLIB)",image->filename); in ReadPSDChannel()
1431 (void) SeekBlob(image,offset+layer_info->channel_info[channel].size-2, in ReadPSDChannel()
1438 image->filename); in ReadPSDChannel()
1442 if (layer_info->mask.image != (Image *) NULL) in ReadPSDChannel()
1443 layer_info->mask.image=DestroyImage(layer_info->mask.image); in ReadPSDChannel()
1444 layer_info->mask.image=mask; in ReadPSDChannel()
1464 if (image->debug != MagickFalse) in ReadPSDLayer()
1467 if (psd_info->mode != IndexedMode) in ReadPSDLayer()
1468 (void) SetImageBackgroundColor(layer_info->image,exception); in ReadPSDLayer()
1469 layer_info->image->compose=PSDBlendModeToCompositeOperator( in ReadPSDLayer()
1470 layer_info->blendkey); in ReadPSDLayer()
1471 if (layer_info->visible == MagickFalse) in ReadPSDLayer()
1472 layer_info->image->compose=NoCompositeOp; in ReadPSDLayer()
1477 (double) layer_info->page.x); in ReadPSDLayer()
1478 (void) SetImageArtifact(layer_info->image,"psd:layer.x",message); in ReadPSDLayer()
1480 (double) layer_info->page.y); in ReadPSDLayer()
1481 (void) SetImageArtifact(layer_info->image,"psd:layer.y",message); in ReadPSDLayer()
1483 layer_info->opacity); in ReadPSDLayer()
1484 (void) SetImageArtifact(layer_info->image,"psd:layer.opacity",message); in ReadPSDLayer()
1485 (void) SetImageProperty(layer_info->image,"label",(char *) layer_info->name, in ReadPSDLayer()
1489 for (j=0; j < (ssize_t) layer_info->channels; j++) in ReadPSDLayer()
1491 if (image->debug != MagickFalse) in ReadPSDLayer()
1495 compression=(PSDCompressionType) ReadBlobShort(layer_info->image); in ReadPSDLayer()
1498 if ((compression == ZipWithPrediction) && (image->depth == 32)) in ReadPSDLayer()
1505 layer_info->image->compression=ConvertPSDCompression(compression); in ReadPSDLayer()
1506 if (layer_info->channel_info[j].type == -1) in ReadPSDLayer()
1507 layer_info->image->alpha_trait=BlendPixelTrait; in ReadPSDLayer()
1509 status=ReadPSDChannel(layer_info->image,image_info,psd_info,layer_info, in ReadPSDLayer()
1517 status=ApplyPSDLayerOpacity(layer_info->image,layer_info->opacity, in ReadPSDLayer()
1521 (layer_info->image->colorspace == CMYKColorspace)) in ReadPSDLayer()
1522 status=NegateCMYK(layer_info->image,exception); in ReadPSDLayer()
1524 if ((status != MagickFalse) && (layer_info->mask.image != (Image *) NULL)) in ReadPSDLayer()
1529 layer_info->mask.image->page.x=layer_info->mask.page.x; in ReadPSDLayer()
1530 layer_info->mask.image->page.y=layer_info->mask.page.y; in ReadPSDLayer()
1532 if ((layer_info->mask.flags & 0x02) == 0x02) in ReadPSDLayer()
1533 layer_info->mask.image->compose=NoCompositeOp; in ReadPSDLayer()
1535 status=ApplyPSDOpacityMask(layer_info->image,layer_info->mask.image, in ReadPSDLayer()
1536 layer_info->mask.background == 0 ? 0 : QuantumRange,MagickFalse, in ReadPSDLayer()
1538 option=GetImageOption(image_info,"psd:preserve-opacity-mask"); in ReadPSDLayer()
1541 layer_info->mask.image=DestroyImage(layer_info->mask.image); in ReadPSDLayer()
1556 if (layer_info->channels < psd_info->min_channels) in CheckPSDChannels()
1559 if (psd_info->min_channels >= 3) in CheckPSDChannels()
1561 if (psd_info->min_channels >= 4) in CheckPSDChannels()
1563 for (i=0; i < (ssize_t) layer_info->channels; i++) in CheckPSDChannels()
1568 type=layer_info->channel_info[i].type; in CheckPSDChannels()
1569 if (type == -1) in CheckPSDChannels()
1574 if (type < -1) in CheckPSDChannels()
1588 (layer_info->channels >= psd_info->min_channels + 1)) in CheckPSDChannels()
1606 for (j=i; j < number_layers - 1; j++) in AttachPSDLayers()
1608 number_layers--; in AttachPSDLayers()
1609 i--; in AttachPSDLayers()
1620 layer_info[i].image->previous=layer_info[i-1].image; in AttachPSDLayers()
1621 if (i < (number_layers-1)) in AttachPSDLayers()
1622 layer_info[i].image->next=layer_info[i+1].image; in AttachPSDLayers()
1623 layer_info[i].image->page=layer_info[i].page; in AttachPSDLayers()
1625 image->next=layer_info[0].image; in AttachPSDLayers()
1626 layer_info[0].image->previous=image; in AttachPSDLayers()
1633 if (image_info->number_scenes == 0) in PSDSkipImage()
1635 if (index < image_info->scene) in PSDSkipImage()
1637 if (index > image_info->scene+image_info->number_scenes-1) in PSDSkipImage()
1703 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1706 image->alpha_trait=BlendPixelTrait; in ReadPSDLayersInternal()
1715 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1721 image->filename); in ReadPSDLayersInternal()
1727 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1731 image->filename); in ReadPSDLayersInternal()
1743 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1754 image->filename); in ReadPSDLayersInternal()
1758 layer_info[i].page.width=(size_t) (right-left); in ReadPSDLayersInternal()
1759 layer_info[i].page.height=(size_t) (bottom-top); in ReadPSDLayersInternal()
1765 image->filename); in ReadPSDLayersInternal()
1767 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1776 if ((layer_info[i].channel_info[j].type < -4) || in ReadPSDLayersInternal()
1781 image->filename); in ReadPSDLayersInternal()
1785 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1795 image->filename); in ReadPSDLayersInternal()
1802 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1807 image->filename); in ReadPSDLayersInternal()
1814 image->filename); in ReadPSDLayersInternal()
1817 layer_info[i].opacity=(Quantum) ScaleCharToQuantum((unsigned char) in ReadPSDLayersInternal()
1822 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1837 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1850 (ReadBlobSignedLong(image)-layer_info[i].mask.page.y); in ReadPSDLayersInternal()
1852 ReadBlobSignedLong(image)-layer_info[i].mask.page.x); in ReadPSDLayersInternal()
1858 layer_info[i].mask.page.y=layer_info[i].mask.page.y- in ReadPSDLayersInternal()
1860 layer_info[i].mask.page.x=layer_info[i].mask.page.x- in ReadPSDLayersInternal()
1863 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1870 length)-18); in ReadPSDLayersInternal()
1874 if (DiscardBlobBytes(image,(MagickSizeType) (length-18)) == MagickFalse) in ReadPSDLayersInternal()
1878 "UnexpectedEndOfFile",image->filename); in ReadPSDLayersInternal()
1888 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1896 "UnexpectedEndOfFile",image->filename); in ReadPSDLayersInternal()
1907 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1912 length=4-(length % 4); in ReadPSDLayersInternal()
1919 "UnexpectedEndOfFile",image->filename); in ReadPSDLayersInternal()
1922 length=(MagickSizeType) size-combined_length; in ReadPSDLayersInternal()
1932 "InsufficientImageDataInFile",image->filename); in ReadPSDLayersInternal()
1945 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1961 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
1965 image->filename); in ReadPSDLayersInternal()
1969 (void) SetImageProfile(layer_info[i].image,"psd:additional-info", in ReadPSDLayersInternal()
1974 if (image_info->ping != MagickFalse) in ReadPSDLayersInternal()
1992 "UnexpectedEndOfFile",image->filename); in ReadPSDLayersInternal()
1998 if (image->debug != MagickFalse) in ReadPSDLayersInternal()
2053 if ((image_info->number_scenes != 0) && (image_info->scene != 0)) in ReadPSDMergedImage()
2056 image->compression=ConvertPSDCompression(compression); in ReadPSDMergedImage()
2068 sizes=ReadPSDRLESizes(image,psd_info,image->rows*psd_info->channels); in ReadPSDMergedImage()
2071 image->filename); in ReadPSDMergedImage()
2075 for (i=0; i < (ssize_t) psd_info->channels; i++) in ReadPSDMergedImage()
2081 if ((type == 1) && (psd_info->channels == 2)) in ReadPSDMergedImage()
2082 type=-1; in ReadPSDMergedImage()
2085 status=ReadPSDChannelRLE(image,psd_info,type,sizes+(i*image->rows), in ReadPSDMergedImage()
2088 status=ReadPSDChannelRaw(image,psd_info->channels,type,exception); in ReadPSDMergedImage()
2092 psd_info->channels); in ReadPSDMergedImage()
2098 if ((status != MagickFalse) && (image->colorspace == CMYKColorspace)) in ReadPSDMergedImage()
2146 assert(image_info->signature == MagickCoreSignature); in ReadPSDImage()
2147 if (image_info->debug != MagickFalse) in ReadPSDImage()
2149 image_info->filename); in ReadPSDImage()
2151 assert(exception->signature == MagickCoreSignature); in ReadPSDImage()
2163 image->endian=MSBEndian; in ReadPSDImage()
2180 psd_info.depth=ReadBlobMSBShort(image); in ReadPSDImage()
2181 if ((psd_info.depth != 1) && (psd_info.depth != 8) && in ReadPSDImage()
2182 (psd_info.depth != 16) && (psd_info.depth != 32)) in ReadPSDImage()
2187 if (image->debug != MagickFalse) in ReadPSDImage()
2189 " Image is %.20g x %.20g with channels=%.20g, depth=%.20g, mode=%s", in ReadPSDImage()
2191 psd_info.channels,(double) psd_info.depth,ModeToString((PSDImageType) in ReadPSDImage()
2198 image->depth=psd_info.depth; in ReadPSDImage()
2199 image->columns=psd_info.columns; in ReadPSDImage()
2200 image->rows=psd_info.rows; in ReadPSDImage()
2201 status=SetImageExtent(image,image->columns,image->rows,exception); in ReadPSDImage()
2218 if (psd_info.depth != 32) in ReadPSDImage()
2220 status=AcquireImageColormap(image,(size_t) (psd_info.depth < 16 ? in ReadPSDImage()
2224 if (image->debug != MagickFalse) in ReadPSDImage()
2241 if (image->debug != MagickFalse) in ReadPSDImage()
2244 if ((psd_info.mode == DuotoneMode) || (psd_info.depth == 32)) in ReadPSDImage()
2265 for (i=0; i < (ssize_t) image->colors; i++) in ReadPSDImage()
2266 image->colormap[i].red=(MagickRealType) ScaleCharToQuantum( in ReadPSDImage()
2268 for (i=0; i < (ssize_t) image->colors; i++) in ReadPSDImage()
2269 image->colormap[i].green=(MagickRealType) ScaleCharToQuantum( in ReadPSDImage()
2271 for (i=0; i < (ssize_t) image->colors; i++) in ReadPSDImage()
2272 image->colormap[i].blue=(MagickRealType) ScaleCharToQuantum( in ReadPSDImage()
2274 image->alpha_trait=UndefinedPixelTrait; in ReadPSDImage()
2277 if ((image->depth == 1) && (image->storage_class != PseudoClass)) in ReadPSDImage()
2290 if (image->debug != MagickFalse) in ReadPSDImage()
2292 " reading image resource blocks - %.20g bytes",(double) in ReadPSDImage()
2322 if ((image_info->number_scenes == 1) && (image_info->scene == 0) && in ReadPSDImage()
2325 if (image->debug != MagickFalse) in ReadPSDImage()
2332 if (image->debug != MagickFalse) in ReadPSDImage()
2354 If we are only "pinging" the image, then we're done - so return. in ReadPSDImage()
2362 if (image_info->ping != MagickFalse) in ReadPSDImage()
2372 if (image->debug != MagickFalse) in ReadPSDImage()
2405 image->background_color.alpha=(MagickRealType) TransparentAlpha; in ReadPSDImage()
2406 image->background_color.alpha_trait=BlendPixelTrait; in ReadPSDImage()
2423 next=next->next; in ReadPSDImage()
2446 % whether the format supports native in-memory I/O, and a brief
2460 entry->decoder=(DecodeImageHandler *) ReadPSDImage; in RegisterPSDImage()
2461 entry->encoder=(EncodeImageHandler *) WritePSDImage; in RegisterPSDImage()
2462 entry->magick=(IsImageFormatHandler *) IsPSD; in RegisterPSDImage()
2463 entry->flags|=CoderDecoderSeekableStreamFlag; in RegisterPSDImage()
2464 entry->flags|=CoderEncoderSeekableStreamFlag; in RegisterPSDImage()
2467 entry->decoder=(DecodeImageHandler *) ReadPSDImage; in RegisterPSDImage()
2468 entry->encoder=(EncodeImageHandler *) WritePSDImage; in RegisterPSDImage()
2469 entry->magick=(IsImageFormatHandler *) IsPSD; in RegisterPSDImage()
2470 entry->flags|=CoderDecoderSeekableStreamFlag; in RegisterPSDImage()
2471 entry->flags|=CoderEncoderSeekableStreamFlag; in RegisterPSDImage()
2532 if (psd_info->version == 1) in SetPSDOffset()
2548 if (psd_info->version == 1) in WritePSDOffset()
2559 if (psd_info->version == 1) in SetPSDSize()
2598 Compress pixels with Packbits encoding. in PSDPackbitsEncodeImage()
2601 assert(image->signature == MagickCoreSignature); in PSDPackbitsEncodeImage()
2602 if (image->debug != MagickFalse) in PSDPackbitsEncodeImage()
2603 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); in PSDPackbitsEncodeImage()
2609 image->filename); in PSDPackbitsEncodeImage()
2617 i--; in PSDPackbitsEncodeImage()
2624 i-=2; in PSDPackbitsEncodeImage()
2632 i-=3; in PSDPackbitsEncodeImage()
2635 *q++=(unsigned char) ((256-3)+1); in PSDPackbitsEncodeImage()
2659 i-=count; in PSDPackbitsEncodeImage()
2660 *q++=(unsigned char) ((256-count)+1); in PSDPackbitsEncodeImage()
2674 if (((ssize_t) count >= (i-3)) || (count >= 127)) in PSDPackbitsEncodeImage()
2677 i-=count; in PSDPackbitsEncodeImage()
2678 *packbits=(unsigned char) (count-1); in PSDPackbitsEncodeImage()
2688 return((size_t) (q-compact_pixels)); in PSDPackbitsEncodeImage()
2706 for (y=0; y < (ssize_t) next_image->rows; y++) in WriteCompressionStart()
2730 register const Quantum in WritePSDChannel()
2769 if (next_image->depth > 8) in WritePSDChannel()
2770 next_image->depth=16; in WritePSDChannel()
2771 monochrome=IsImageMonochrome(image) && (image->depth == 1) ? in WritePSDChannel()
2790 if ((image_info->quality > 0 && image_info->quality < 10)) in WritePSDChannel()
2791 level=(int) image_info->quality; in WritePSDChannel()
2801 for (y=0; y < (ssize_t) next_image->rows; y++) in WritePSDChannel()
2803 p=GetVirtualPixels(next_image,0,y,next_image->columns,1,exception); in WritePSDChannel()
2804 if (p == (const Quantum *) NULL) in WritePSDChannel()
2823 if (y == (ssize_t) next_image->rows-1) in WritePSDChannel()
2830 length=(size_t) CHUNK-stream.avail_out; in WritePSDChannel()
2860 packet_size=image->depth > 8UL ? 2UL : 1UL; in AcquireCompactPixels()
2862 image->columns)+1,packet_size*sizeof(*compact_pixels)); in AcquireCompactPixels()
2866 ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename); in AcquireCompactPixels()
2898 compression=next_image->compression; in WritePSDChannels()
2899 if (image_info->compression != UndefinedCompression) in WritePSDChannels()
2900 compression=image_info->compression; in WritePSDChannels()
2910 if (next_image->storage_class != PseudoClass) in WritePSDChannels()
2913 channels=(size_t) (next_image->colorspace == CMYKColorspace ? 4 : in WritePSDChannels()
2915 if (next_image->alpha_trait != UndefinedPixelTrait) in WritePSDChannels()
2921 offset_length=(next_image->rows*(psd_info->version == 1 ? 2 : 4)); in WritePSDChannels()
2924 if (next_image->storage_class == PseudoClass) in WritePSDChannels()
2950 if (next_image->colorspace == CMYKColorspace) in WritePSDChannels()
2980 if (next_image->colorspace == CMYKColorspace) in WritePSDChannels()
2992 if (next_image->alpha_trait != UndefinedPixelTrait) in WritePSDChannels()
3005 if (next_image->colorspace == CMYKColorspace) in WritePSDChannels()
3012 property=GetImageArtifact(next_image,"psd:opacity-mask"); in WritePSDChannels()
3062 for (i=0; i < (ssize_t) (padding-(length % padding)); i++) in WritePascalString()
3076 if (image->units == PixelsPerCentimeterResolution) in WriteResolutionResourceBlock()
3078 x_resolution=2.54*65536.0*image->resolution.x+0.5; in WriteResolutionResourceBlock()
3079 y_resolution=2.54*65536.0*image->resolution.y+0.5; in WriteResolutionResourceBlock()
3084 x_resolution=65536.0*image->resolution.x+0.5; in WriteResolutionResourceBlock()
3085 y_resolution=65536.0*image->resolution.y+0.5; in WriteResolutionResourceBlock()
3134 for (p=datum; (p >= datum) && (p < (datum+length-16)); ) in RemoveICCProfileFromResourceBlock()
3149 quantum; in RemoveICCProfileFromResourceBlock() local
3151 quantum=PSDQuantum(count)+12; in RemoveICCProfileFromResourceBlock()
3152 if ((quantum >= 12) && (quantum < (ssize_t) length)) in RemoveICCProfileFromResourceBlock()
3154 if ((q+quantum < (datum+length-16))) in RemoveICCProfileFromResourceBlock()
3155 (void) memmove(q,q+quantum,length-quantum-(q-datum)); in RemoveICCProfileFromResourceBlock()
3156 SetStringInfoLength(bim_profile,length-quantum); in RemoveICCProfileFromResourceBlock()
3189 for (p=datum; (p >= datum) && (p < (datum+length-16)); ) in RemoveResolutionFromResourceBlock()
3207 if ((id == 0x000003ed) && (cnt < (ssize_t) (length-12)) && in RemoveResolutionFromResourceBlock()
3208 ((ssize_t) length-(cnt+12)-(q-datum)) > 0) in RemoveResolutionFromResourceBlock()
3210 (void) memmove(q,q+cnt+12,length-(cnt+12)-(q-datum)); in RemoveResolutionFromResourceBlock()
3211 SetStringInfoLength(bim_profile,length-(cnt+12)); in RemoveResolutionFromResourceBlock()
3229 /* Whitelist of keys from: https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/ */ in GetAdditionalInformation()
3261 info=GetImageProfile(image,"psd:additional-info"); in GetAdditionalInformation()
3264 option=GetImageOption(image_info,"psd:additional-info"); in GetAdditionalInformation()
3269 profile=RemoveImageProfile(image,"psd:additional-info"); in GetAdditionalInformation()
3290 remaining_length-=12; in GetAdditionalInformation()
3302 remaining_length-=(size_t) size; in GetAdditionalInformation()
3306 p=(unsigned char *) memmove(p-12,p+size,remaining_length); in GetAdditionalInformation()
3312 profile=RemoveImageProfile(image,"psd:additional-info"); in GetAdditionalInformation()
3316 (void) SetImageProfile(image,"psd:additional-info",info,exception); in GetAdditionalInformation()
3368 if (image->alpha_trait != UndefinedPixelTrait) in WritePSDLayersInternal()
3369 size+=WriteBlobShort(image,-(unsigned short) layer_count); in WritePSDLayersInternal()
3390 property=GetImageArtifact(next_image,"psd:opacity-mask"); in WritePSDLayersInternal()
3397 size+=WriteBlobSignedLong(image,(signed int) next_image->page.y); in WritePSDLayersInternal()
3398 size+=WriteBlobSignedLong(image,(signed int) next_image->page.x); in WritePSDLayersInternal()
3399 size+=WriteBlobSignedLong(image,(signed int) (next_image->page.y+ in WritePSDLayersInternal()
3400 next_image->rows)); in WritePSDLayersInternal()
3401 size+=WriteBlobSignedLong(image,(signed int) (next_image->page.x+ in WritePSDLayersInternal()
3402 next_image->columns)); in WritePSDLayersInternal()
3404 if ((next_image->storage_class != PseudoClass) && in WritePSDLayersInternal()
3406 channels=(unsigned short) (next_image->colorspace == CMYKColorspace ? 4 : in WritePSDLayersInternal()
3409 if (next_image->alpha_trait != UndefinedPixelTrait) in WritePSDLayersInternal()
3417 if (next_image->alpha_trait != UndefinedPixelTrait) in WritePSDLayersInternal()
3418 size+=WriteChannelSize(psd_info,image,-1); in WritePSDLayersInternal()
3420 size+=WriteChannelSize(psd_info,image,-2); in WritePSDLayersInternal()
3421 size+=WriteBlobString(image,image->endian == LSBEndian ? "MIB8" :"8BIM"); in WritePSDLayersInternal()
3426 Quantum in WritePSDLayersInternal()
3429 opacity=(Quantum) StringToInteger(property); in WritePSDLayersInternal()
3437 … (next_image->compose == NoCompositeOp ? 1 << 0x02 : 1)); /* layer properties - visible, etc. */ in WritePSDLayersInternal()
3449 name_length+=(4-(name_length % 4)); in WritePSDLayersInternal()
3460 if (mask->compose != NoCompositeOp) in WritePSDLayersInternal()
3463 mask->page.y+=image->page.y; in WritePSDLayersInternal()
3464 mask->page.x+=image->page.x; in WritePSDLayersInternal()
3466 size+=WriteBlobSignedLong(image,(const signed int) mask->page.y); in WritePSDLayersInternal()
3467 size+=WriteBlobSignedLong(image,(const signed int) mask->page.x); in WritePSDLayersInternal()
3468 size+=WriteBlobSignedLong(image,(const signed int) (mask->rows+ in WritePSDLayersInternal()
3469 mask->page.y)); in WritePSDLayersInternal()
3470 size+=WriteBlobSignedLong(image,(const signed int) (mask->columns+ in WritePSDLayersInternal()
3471 mask->page.x)); in WritePSDLayersInternal()
3474 (mask->compose == NoCompositeOp ? 2 : 0)); in WritePSDLayersInternal()
3519 property=GetImageArtifact(next_image,"psd:opacity-mask"); in WritePSDLayersInternal()
3572 assert(image_info->signature == MagickCoreSignature); in WritePSDImage()
3574 assert(image->signature == MagickCoreSignature); in WritePSDImage()
3575 if (image->debug != MagickFalse) in WritePSDImage()
3576 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); in WritePSDImage()
3578 assert(exception->signature == MagickCoreSignature); in WritePSDImage()
3582 packet_size=(size_t) (image->depth > 8 ? 6 : 3); in WritePSDImage()
3583 if (image->alpha_trait != UndefinedPixelTrait) in WritePSDImage()
3584 packet_size+=image->depth > 8 ? 2 : 1; in WritePSDImage()
3586 if ((LocaleCompare(image_info->magick,"PSB") == 0) || in WritePSDImage()
3587 (image->columns > 30000) || (image->rows > 30000)) in WritePSDImage()
3596 num_channels=(image->alpha_trait != UndefinedPixelTrait ? 2UL : 1UL); in WritePSDImage()
3598 if ((image_info->type != TrueColorType) && (image_info->type != in WritePSDImage()
3599 TrueColorAlphaType) && (image->storage_class == PseudoClass)) in WritePSDImage()
3600 num_channels=(image->alpha_trait != UndefinedPixelTrait ? 2UL : 1UL); in WritePSDImage()
3603 if (image->storage_class == PseudoClass) in WritePSDImage()
3605 if (image->colorspace != CMYKColorspace) in WritePSDImage()
3606 num_channels=(image->alpha_trait != UndefinedPixelTrait ? 4UL : 3UL); in WritePSDImage()
3608 num_channels=(image->alpha_trait != UndefinedPixelTrait ? 5UL : 4UL); in WritePSDImage()
3611 (void) WriteBlobMSBLong(image,(unsigned int) image->rows); in WritePSDImage()
3612 (void) WriteBlobMSBLong(image,(unsigned int) image->columns); in WritePSDImage()
3619 Write depth & mode. in WritePSDImage()
3621 monochrome=IsImageMonochrome(image) && (image->depth == 1) ? in WritePSDImage()
3624 (monochrome != MagickFalse ? 1 : image->depth > 8 ? 16 : 8)); in WritePSDImage()
3630 (void) WriteBlobMSBShort(image,(unsigned short) (image->storage_class == in WritePSDImage()
3631 PseudoClass ? 8 : image->depth > 8 ? 16 : 8)); in WritePSDImage()
3633 if (((image_info->colorspace != UndefinedColorspace) || in WritePSDImage()
3634 (image->colorspace != CMYKColorspace)) && in WritePSDImage()
3635 (image_info->colorspace != CMYKColorspace)) in WritePSDImage()
3639 (image->storage_class == PseudoClass ? IndexedMode : RGBMode)); in WritePSDImage()
3643 if (image->colorspace != CMYKColorspace) in WritePSDImage()
3649 (image->storage_class == DirectClass) || (image->colors > 256)) in WritePSDImage()
3657 for (i=0; i < (ssize_t) image->colors; i++) in WritePSDImage()
3659 image->colormap[i].red))); in WritePSDImage()
3662 for (i=0; i < (ssize_t) image->colors; i++) in WritePSDImage()
3664 image->colormap[i].green))); in WritePSDImage()
3667 for (i=0; i < (ssize_t) image->colors; i++) in WritePSDImage()
3669 image->colormap[i].blue))); in WritePSDImage()
3733 compression=image->compression; in WritePSDImage()
3734 if (image->compression == ZipCompression) in WritePSDImage()
3735 image->compression=RLECompression; in WritePSDImage()
3736 if (image_info->compression != UndefinedCompression) in WritePSDImage()
3737 image->compression=image_info->compression; in WritePSDImage()
3741 image->compression=compression; in WritePSDImage()