Center each text line individually when drawing on image
Updated text rendering logic to center each line horizontally based on its estimated width, ensuring multi-line text is visually centered. Previously, all lines were drawn at a fixed horizontal position. Both shadow and main text now use the calculated centered position.
This commit is contained in:
parent
7e1ca95a25
commit
4091fb78c5
1 changed files with 10 additions and 2 deletions
|
|
@ -271,8 +271,16 @@ public class ImageCreatorAlternate : IImageCreator
|
|||
// Ensure we're drawing inside the canvas vertically
|
||||
if (y + finalFont.Size < 0 || y > working.Height) continue;
|
||||
|
||||
ctx.DrawText(line, finalFont, shadowColor, new SixLabors.ImageSharp.PointF(originX + 1, y + 1));
|
||||
ctx.DrawText(line, finalFont, textColor, new SixLabors.ImageSharp.PointF(originX, y));
|
||||
// Center each line individually so multi-line (vertical) text is justified to center
|
||||
var approxWidthLine = finalFont.Size * (line?.Length ?? 0) * 0.6f;
|
||||
if (approxWidthLine > working.Width)
|
||||
approxWidthLine = working.Width * 0.95f;
|
||||
|
||||
var x = xCenterOfImg - (approxWidthLine / 2f);
|
||||
x = Math.Max(0, Math.Min(x, working.Width - approxWidthLine));
|
||||
|
||||
ctx.DrawText(line, finalFont, shadowColor, new SixLabors.ImageSharp.PointF(x + 1, y + 1));
|
||||
ctx.DrawText(line, finalFont, textColor, new SixLabors.ImageSharp.PointF(x, y));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue