diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2022-12-24 06:13:05 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-24 06:13:05 +0000 |
commit | 684d7059bcab0a198ec9c98ad7277cffe4bb2e17 (patch) | |
tree | b9431a31380edf6bf9366359e7972fed353f34b5 | |
parent | 55f3ef876be02ebec40ca91f9232a269ac6703e3 (diff) | |
parent | b7c478c3ebb2b1844efd5d6bddb69095dd10808f (diff) | |
download | stable-diffusion-webui-gfx803-684d7059bcab0a198ec9c98ad7277cffe4bb2e17.tar.gz stable-diffusion-webui-gfx803-684d7059bcab0a198ec9c98ad7277cffe4bb2e17.tar.bz2 stable-diffusion-webui-gfx803-684d7059bcab0a198ec9c98ad7277cffe4bb2e17.zip |
Merge pull request #5808 from stysmmaker/patch/fix-fnt-size
Prevent overlapping in X/Y plot by changing font size
-rw-r--r-- | modules/images.py | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/modules/images.py b/modules/images.py index 8146f580..ad97980c 100644 --- a/modules/images.py +++ b/modules/images.py @@ -136,8 +136,19 @@ def draw_grid_annotations(im, width, height, hor_texts, ver_texts): lines.append(word)
return lines
- def draw_texts(drawing, draw_x, draw_y, lines):
+ def get_font(fontsize):
+ try:
+ return ImageFont.truetype(opts.font or Roboto, fontsize)
+ except Exception:
+ return ImageFont.truetype(Roboto, fontsize)
+
+ def draw_texts(drawing, draw_x, draw_y, lines, initial_fnt, initial_fontsize):
for i, line in enumerate(lines):
+ fnt = initial_fnt
+ fontsize = initial_fontsize
+ while drawing.multiline_textsize(line.text, font=fnt)[0] > line.allowed_width and fontsize > 0:
+ fontsize -= 1
+ fnt = get_font(fontsize)
drawing.multiline_text((draw_x, draw_y + line.size[1] / 2), line.text, font=fnt, fill=color_active if line.is_active else color_inactive, anchor="mm", align="center")
if not line.is_active:
@@ -148,10 +159,7 @@ def draw_grid_annotations(im, width, height, hor_texts, ver_texts): fontsize = (width + height) // 25
line_spacing = fontsize // 2
- try:
- fnt = ImageFont.truetype(opts.font or Roboto, fontsize)
- except Exception:
- fnt = ImageFont.truetype(Roboto, fontsize)
+ fnt = get_font(fontsize)
color_active = (0, 0, 0)
color_inactive = (153, 153, 153)
@@ -178,6 +186,7 @@ def draw_grid_annotations(im, width, height, hor_texts, ver_texts): for line in texts:
bbox = calc_d.multiline_textbbox((0, 0), line.text, font=fnt)
line.size = (bbox[2] - bbox[0], bbox[3] - bbox[1])
+ line.allowed_width = allowed_width
hor_text_heights = [sum([line.size[1] + line_spacing for line in lines]) - line_spacing for lines in hor_texts]
ver_text_heights = [sum([line.size[1] + line_spacing for line in lines]) - line_spacing * len(lines) for lines in
@@ -194,13 +203,13 @@ def draw_grid_annotations(im, width, height, hor_texts, ver_texts): x = pad_left + width * col + width / 2
y = pad_top / 2 - hor_text_heights[col] / 2
- draw_texts(d, x, y, hor_texts[col])
+ draw_texts(d, x, y, hor_texts[col], fnt, fontsize)
for row in range(rows):
x = pad_left / 2
y = pad_top + height * row + height / 2 - ver_text_heights[row] / 2
- draw_texts(d, x, y, ver_texts[row])
+ draw_texts(d, x, y, ver_texts[row], fnt, fontsize)
return result
|