From 0c48f8fbd1e824a774e30177f7ac60329d857e2a Mon Sep 17 00:00:00 2001 From: hrj Date: Sun, 3 Apr 2022 16:45:33 +0530 Subject: [PATCH] filter challenge: ensure that text fits within image width --- src/main/scala/lc/captchas/FilterChallenge.scala | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/scala/lc/captchas/FilterChallenge.scala b/src/main/scala/lc/captchas/FilterChallenge.scala index 2a704b5..bfda62a 100644 --- a/src/main/scala/lc/captchas/FilterChallenge.scala +++ b/src/main/scala/lc/captchas/FilterChallenge.scala @@ -47,9 +47,13 @@ class FilterChallenge extends ChallengeProvider { g.setColor(Color.WHITE) g.fillRect(0, 0, canvas.getWidth, canvas.getHeight) g.setColor(Color.BLACK) - g.setFont(new Font("Serif", Font.PLAIN, fontHeight)) + val font = new Font("Serif", Font.PLAIN, fontHeight) + g.setFont(font) val stringWidth = g.getFontMetrics().stringWidth(secret) - val xOffset = ((width - stringWidth)*r.nextDouble).toInt + val scaleX = if (stringWidth > width) width/(stringWidth.toDouble) else 1d + val margin = if (stringWidth > width) 0 else (width - stringWidth) + val xOffset = (margin*r.nextDouble).toInt + g.scale(scaleX, 1d) g.drawString(secret, xOffset, fontHeight) g.dispose() var image = ImmutableImage.fromAwt(canvas)