From 07fb0fdd5d4e5ecd26246708505fce307a5c52bf Mon Sep 17 00:00:00 2001 From: Cristy Date: Wed, 2 Oct 2019 20:43:51 -0400 Subject: [PATCH] https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=36829 --- ChangeLog | 2 ++ MagickCore/composite.c | 16 ++++++++-------- coders/caption.c | 9 +++++++-- coders/label.c | 10 +++++++--- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 24ba42409b..9fa3dd7322 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,8 @@ 2019-09-30 7.0.8-68 Cristy * Support animated WebP encoding/decoding (reference https://github.com/ImageMagick/ImageMagick/pull/1708). + * Text stroke cut off (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=36829). 2019-09-29 7.0.8-67 Cristy * Release ImageMagick version 7.0.8-67, GIT revision 16145:6f2feb9:20190929. diff --git a/MagickCore/composite.c b/MagickCore/composite.c index 62fb54138a..95da2578f3 100644 --- a/MagickCore/composite.c +++ b/MagickCore/composite.c @@ -1847,7 +1847,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, */ if ((Sca*Da) < (Dca*Sa)) { - pixel=QuantumRange*(Sca+Dca*(1.0-Sa)); + pixel=QuantumRange*gamma*(Sca+Dca*(1.0-Sa)); break; } pixel=QuantumRange*(Dca+Sca*(1.0-Da)); @@ -1915,12 +1915,12 @@ MagickExport MagickBooleanType CompositeImage(Image *image, } case DstInCompositeOp: { - pixel=QuantumRange*(Dca*Sa); + pixel=QuantumRange*gamma*(Dca*Sa); break; } case DstOutCompositeOp: { - pixel=QuantumRange*(Dca*(1.0-Sa)); + pixel=QuantumRange*gamma*(Dca*(1.0-Sa)); break; } case DstOverCompositeOp: @@ -1980,7 +1980,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, case InCompositeOp: case SrcInCompositeOp: { - pixel=QuantumRange*(Sca*Da); + pixel=QuantumRange*gamma*(Sca*Da); break; } case LinearBurnCompositeOp: @@ -2014,10 +2014,10 @@ MagickExport MagickBooleanType CompositeImage(Image *image, { if ((Sca*Da) > (Dca*Sa)) { - pixel=QuantumRange*(Sca+Dca*(1.0-Sa)); + pixel=QuantumRange*gamma*(Sca+Dca*(1.0-Sa)); break; } - pixel=QuantumRange*(Dca+Sca*(1.0-Da)); + pixel=QuantumRange*gamma*(Dca+Sca*(1.0-Da)); break; } case LightenIntensityCompositeOp: @@ -2189,7 +2189,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, */ if (fabs((double) Da) < MagickEpsilon) { - pixel=QuantumRange*gamma*(Sca); + pixel=QuantumRange*gamma*Sca; break; } pixel=QuantumRange*gamma*(Dca*Dca*(Sa-2.0*Sca)/Da+Sca*(2.0*Dca+1.0- @@ -2323,7 +2323,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, } case XorCompositeOp: { - pixel=QuantumRange*(Sca*(1.0-Da)+Dca*(1.0-Sa)); + pixel=QuantumRange*gamma*(Sca*(1.0-Da)+Dca*(1.0-Sa)); break; } default: diff --git a/coders/caption.c b/coders/caption.c index 929b24933e..a9802e5eba 100644 --- a/coders/caption.c +++ b/coders/caption.c @@ -120,6 +120,9 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info, height, width; + size_t + offset; + TypeMetric metrics; @@ -302,10 +305,12 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info, i=FormatMagickCaption(image,draw_info,split,&metrics,&caption,exception); (void) CloneString(&draw_info->text,caption); caption=DestroyString(caption); + offset=(ssize_t) (draw_info->stroke_width/2.0); (void) FormatLocaleString(geometry,MagickPathExtent,"%+g%+g",MagickMax( draw_info->direction == RightToLeftDirection ? (double) image->columns- - metrics.bounds.x2 : -metrics.bounds.x1,0.0),draw_info->gravity == - UndefinedGravity ? MagickMax(metrics.ascent,metrics.bounds.y2) : 0.0); + metrics.bounds.x2 : -metrics.bounds.x1,0.0)+offset,(draw_info->gravity == + UndefinedGravity ? MagickMax(metrics.ascent,metrics.bounds.y2) : 0.0)+ + offset); (void) CloneString(&draw_info->geometry,geometry); status=AnnotateImage(image,draw_info,exception); if (image_info->pointsize == 0.0) diff --git a/coders/label.c b/coders/label.c index 3e543a349f..52e1d9546e 100644 --- a/coders/label.c +++ b/coders/label.c @@ -110,6 +110,9 @@ static Image *ReadLABELImage(const ImageInfo *image_info, height, width; + ssize_t + offset; + /* Initialize Image structure. */ @@ -254,10 +257,11 @@ static Image *ReadLABELImage(const ImageInfo *image_info, /* Draw label. */ + offset=(ssize_t) (draw_info->stroke_width/2.0); (void) FormatLocaleString(geometry,MagickPathExtent,"%+g%+g", - draw_info->direction == RightToLeftDirection ? (double) image->columns- - metrics.bounds.x2 : 0.0,draw_info->gravity == UndefinedGravity ? - MagickMax(metrics.ascent,metrics.bounds.y2) : 0.0); + (draw_info->direction == RightToLeftDirection ? (double) image->columns- + metrics.bounds.x2 : 0.0)+offset,(draw_info->gravity == UndefinedGravity ? + MagickMax(metrics.ascent,metrics.bounds.y2) : 0.0)+offset); (void) CloneString(&draw_info->geometry,geometry); status=AnnotateImage(image,draw_info,exception); if (image_info->pointsize == 0.0)