93 lines
3.3 KiB
Diff
93 lines
3.3 KiB
Diff
|
From 1ddcf2e4f28029a888cadef2e757509ef5047ad8 Mon Sep 17 00:00:00 2001
|
|||
|
From: Cristy <urban-warrior@imagemagick.org>
|
|||
|
Date: Mon, 8 Jul 2019 06:14:34 -0400
|
|||
|
Subject: [PATCH] https://github.com/ImageMagick/ImageMagick/issues/1629
|
|||
|
|
|||
|
Downloaded from upstream commit
|
|||
|
https://github.com/ImageMagick/ImageMagick/commit/1ddcf2e4f28029a888cadef2e757509ef5047ad8
|
|||
|
|
|||
|
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
|
|||
|
---
|
|||
|
MagickCore/layer.c | 56 ++++++++++++++++++++++++----------------------
|
|||
|
1 file changed, 29 insertions(+), 27 deletions(-)
|
|||
|
|
|||
|
diff --git a/MagickCore/layer.c b/MagickCore/layer.c
|
|||
|
index b520e9247d..48632885ae 100644
|
|||
|
--- a/MagickCore/layer.c
|
|||
|
+++ b/MagickCore/layer.c
|
|||
|
@@ -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);
|
|||
|
}
|
|||
|
|
|||
|
/*
|