mirror of
https://github.com/aljazceru/njump.git
synced 2025-12-18 23:04:21 +01:00
Improve dynamic font size calculation in text-image
This commit is contained in:
@@ -182,29 +182,27 @@ func drawText(paragraphs []string, width, height int, dynamicResize bool) image.
|
|||||||
color := color.RGBA{R: 255, G: 230, B: 238, A: 255}
|
color := color.RGBA{R: 255, G: 230, B: 238, A: 255}
|
||||||
img := image.NewNRGBA(image.Rect(0, 0, width, height))
|
img := image.NewNRGBA(image.Rect(0, 0, width, height))
|
||||||
|
|
||||||
joinedContent := strings.Join(paragraphs, "\n")
|
joinedContent := strings.Join(paragraphs, " \n") // The space before the \n is necessary
|
||||||
if dynamicResize && len(joinedContent) < 141 {
|
if dynamicResize && len(joinedContent) < 141 {
|
||||||
FONT_SIZE = 7
|
fontSizeTest := 7.0
|
||||||
|
step := 0.5
|
||||||
img := gg.NewContext(width, height)
|
img := gg.NewContext(width, height)
|
||||||
fontData, _ := fonts.ReadFile("fonts/NotoSans.ttf")
|
fontData, _ := fonts.ReadFile("fonts/NotoSans.ttf")
|
||||||
ttf, _ := truetype.Parse(fontData)
|
ttf, _ := truetype.Parse(fontData)
|
||||||
i := 1
|
for {
|
||||||
lineSpacing := 1.2
|
fontSizeTest += step
|
||||||
for i < 20 {
|
|
||||||
FONT_SIZE += i
|
|
||||||
img.SetFontFace(truetype.NewFace(ttf, &truetype.Options{
|
img.SetFontFace(truetype.NewFace(ttf, &truetype.Options{
|
||||||
Size: float64(FONT_SIZE),
|
Size: fontSizeTest,
|
||||||
DPI: 260,
|
DPI: 260,
|
||||||
}))
|
}))
|
||||||
wrappedContent := strings.Join(img.WordWrap(joinedContent, float64(width-120)), "\n")
|
wrappedContent := img.WordWrap(joinedContent, float64(width-70))
|
||||||
_, checkHeight := img.MeasureMultilineString(wrappedContent, lineSpacing)
|
_, checkHeight := img.MeasureMultilineString(strings.Join(wrappedContent, "\n"), 1.0)
|
||||||
if checkHeight > float64(height-70-60*2) {
|
if checkHeight > float64(height-70-60*2) || fontSizeTest > 50 {
|
||||||
FONT_SIZE -= 1
|
fontSizeTest -= step
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
i += 1
|
|
||||||
}
|
}
|
||||||
FONT_SIZE = FONT_SIZE*4 - 2
|
FONT_SIZE = int(fontSizeTest * (float64(FONT_SIZE) / 7))
|
||||||
}
|
}
|
||||||
|
|
||||||
lineNumber := 1
|
lineNumber := 1
|
||||||
|
|||||||
Reference in New Issue
Block a user