Skip to content

Commit

Permalink
https://github.com/ImageMagick/ImageMagick/issues/1629
Browse files Browse the repository at this point in the history
  • Loading branch information
Cristy committed Jul 8, 2019
1 parent 82c685a commit 1ddcf2e
Showing 1 changed file with 29 additions and 27 deletions.
56 changes: 29 additions & 27 deletions MagickCore/layer.c
Expand Up @@ -1584,45 +1584,47 @@ MagickExport void OptimizeImageTransparency(const Image *image,
% o exception: return any errors or warnings in this structure.
%
*/
MagickExport void RemoveDuplicateLayers(Image **images,
ExceptionInfo *exception)
MagickExport void RemoveDuplicateLayers(Image **images,ExceptionInfo *exception)
{
register Image
*curr,
*next;

RectangleInfo
bounds;

register Image
*image,
*next;

assert((*images) != (const Image *) NULL);
assert((*images)->signature == MagickCoreSignature);
if ((*images)->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",(*images)->filename);
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
(*images)->filename);
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickCoreSignature);

curr=GetFirstImageInList(*images);
for (; (next=GetNextImageInList(curr)) != (Image *) NULL; curr=next)
image=GetFirstImageInList(*images);
for ( ; (next=GetNextImageInList(image)) != (Image *) NULL; image=next)
{
if ( curr->columns != next->columns || curr->rows != next->rows
|| curr->page.x != next->page.x || curr->page.y != next->page.y )
if ((image->columns != next->columns) || (image->rows != next->rows) ||
(image->page.x != next->page.x) || (image->page.y != next->page.y))
continue;
bounds=CompareImagesBounds(curr,next,CompareAnyLayer,exception);
if ( bounds.x < 0 ) {
/*
the two images are the same, merge time delays and delete one.
*/
size_t time;
time = curr->delay*1000/curr->ticks_per_second;
time += next->delay*1000/next->ticks_per_second;
next->ticks_per_second = 100L;
next->delay = time*curr->ticks_per_second/1000;
next->iterations = curr->iterations;
*images = curr;
(void) DeleteImageFromList(images);
}
bounds=CompareImagesBounds(image,next,CompareAnyLayer,exception);
if (bounds.x < 0)
{
/*
Two images are the same, merge time delays and delete one.
*/
size_t
time;

time=1000*image->delay*PerceptibleReciprocal(image->ticks_per_second);
time+=1000*next->delay*PerceptibleReciprocal(next->ticks_per_second);
next->ticks_per_second=100L;
next->delay=time*image->ticks_per_second/1000;
next->iterations=image->iterations;
*images=image;
(void) DeleteImageFromList(images);
}
}
*images = GetFirstImageInList(*images);
*images=GetFirstImageInList(*images);
}

/*
Expand Down

0 comments on commit 1ddcf2e

Please sign in to comment.