From 32a4a9b552e218179366587c93ecb21c0838d780 Mon Sep 17 00:00:00 2001 From: Dirk Lemstra Date: Fri, 23 Aug 2019 09:43:54 +0200 Subject: [PATCH] Added option to limit the maximum point size. --- ChangeLog | 4 ++++ coders/caption.c | 59 ++++++++++++++++++++++++++++-------------------- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index cfc99c6da..3b6e5c733 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,10 @@ 2019-08-19 7.0.8-62 Cristy * Release ImageMagick version 7.0.8-62, GIT revision 16... +2019-08-23 7.0.8-62 Dirk Lemstra + * Added option to limit the maximum point size with -define + caption:max-pointsize=pointsize. + 2019-08-19 7.0.8-62 Cristy * Conditionally compile call to AcquireCLocale() (reference https://github.com/ImageMagick/ImageMagick/issues/1669). diff --git a/coders/caption.c b/coders/caption.c index 20e757545..929b24933 100644 --- a/coders/caption.c +++ b/coders/caption.c @@ -225,33 +225,44 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info, /* Auto fit text into bounding box. */ - for (n=0; n < 32; n++, draw_info->pointsize*=2.0) - { - text=AcquireString(caption); - i=FormatMagickCaption(image,draw_info,split,&metrics,&text, - exception); - (void) CloneString(&draw_info->text,text); - text=DestroyString(text); - (void) FormatLocaleString(geometry,MagickPathExtent,"%+g%+g", - -metrics.bounds.x1,metrics.ascent); - if (draw_info->gravity == UndefinedGravity) - (void) CloneString(&draw_info->geometry,geometry); - status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception); - if (status == MagickFalse) - break; - width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5); - height=(size_t) floor(metrics.height+draw_info->stroke_width+0.5); - if ((image->columns != 0) && (image->rows != 0)) + option=GetImageOption(image_info,"caption:max-pointsize"); + if (option != (const char*) NULL) + { + high=StringToDouble(option,(char**) NULL); + if (high < 1.0) + high=1.0; + high+=1.0; + } + else + { + for (n=0; n < 32; n++, draw_info->pointsize*=2.0) { - if ((width >= image->columns) && (height >= image->rows)) + text=AcquireString(caption); + i=FormatMagickCaption(image,draw_info,split,&metrics,&text, + exception); + (void) CloneString(&draw_info->text,text); + text=DestroyString(text); + (void) FormatLocaleString(geometry,MagickPathExtent,"%+g%+g", + -metrics.bounds.x1,metrics.ascent); + if (draw_info->gravity == UndefinedGravity) + (void) CloneString(&draw_info->geometry,geometry); + status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception); + if (status == MagickFalse) break; + width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5); + height=(size_t) floor(metrics.height+draw_info->stroke_width+0.5); + if ((image->columns != 0) && (image->rows != 0)) + { + if ((width >= image->columns) && (height >= image->rows)) + break; + } + else + if (((image->columns != 0) && (width >= image->columns)) || + ((image->rows != 0) && (height >= image->rows))) + break; } - else - if (((image->columns != 0) && (width >= image->columns)) || - ((image->rows != 0) && (height >= image->rows))) - break; - } - high=draw_info->pointsize; + high=draw_info->pointsize; + } for (low=1.0; (high-low) > 0.5; ) { draw_info->pointsize=(low+high)/2.0; -- 2.40.0