]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Wed, 13 Mar 2013 21:24:28 +0000 (21:24 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Wed, 13 Mar 2013 21:24:28 +0000 (21:24 +0000)
coders/caption.c
coders/label.c

index 45ce95cc3c52c7f8a9b8244291df897f0e1e51b9..5b8cd55fa4c16f94685501a2b2c2291cdc245211 100644 (file)
@@ -155,8 +155,7 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
   if (gravity != (char *) NULL)
     draw_info->gravity=(GravityType) ParseCommandOption(MagickGravityOptions,
       MagickFalse,gravity);
-  if ((*caption != '\0') && (image->rows != 0) &&
-      (image_info->pointsize == 0.0))
+  if ((*caption != '\0') && (image_info->pointsize == 0.0))
     {
       char
         *text;
@@ -168,6 +167,27 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
       /*
         Auto fit text into bounding box.
       */
+      status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
+      if (image->rows == 0)
+        {
+          for ( ; ; )
+          {
+            (void) FormatLocaleString(geometry,MaxTextExtent,"%+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);
+            (void) status;
+            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 (width > image->columns)
+              break;
+            if (width > (image->columns << 1))
+              break;
+            draw_info->pointsize*=2.0;
+          }
+          image->rows=(size_t) floor(height);
+        }
       for ( ; ; draw_info->pointsize*=2.0)
       {
         text=AcquireString(caption);
index fc59df6a444565753449b646f6f8eaf6c88b896a..0fef1c9d6b0f9e63e2ef785a43d5850756c33755 100644 (file)
@@ -130,7 +130,7 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
   label=GetImageProperty(image,"label",exception);
   draw_info=CloneDrawInfo(image_info,(DrawInfo *) NULL);
   draw_info->text=ConstantString(label);
-  if ((*label != '\0') && (image->rows != 0) && (image_info->pointsize == 0.0))
+  if ((*label != '\0') && (image_info->pointsize == 0.0))
     {
       double
         high,
@@ -140,6 +140,26 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
         Auto fit text into bounding box.
       */
       status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
+      if (image->rows == 0)
+        {
+          for ( ; ; )
+          {
+            (void) FormatLocaleString(geometry,MaxTextExtent,"%+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);
+            (void) status;
+            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 (width > image->columns)
+              break;
+            if (width > (image->columns << 1))
+              break;
+            draw_info->pointsize*=2.0;
+          }
+          image->rows=(size_t) floor(height);
+        }
       for ( ; ; )
       {
         (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",