I'm using svgwrite in python to generate output based off my Tensorflow model to output simulated handwritten text. My current setup requires an array of strings to represent line breaks however the generated text size isn't consistent and sometimes renders awkward spacing after the last word in the line such as
Is it possible to add text-wrapping to a single long line that would automatically add line breaks when the current line reaches the max width given? A Google Search brought me to the svgwrite page and suggested to use TextArea but the examples given are HTML.
def _draw(self, strokes, lines, filename, stroke_colors=None, \
stroke_widths=None, background_color='white'):
lines = [
"Lorem ipsum dolor sit amet, consectetur adipiscing elit,",
"sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris",
"nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in",
"reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
]
stroke_colors = stroke_colors or ['black']*len(lines)
stroke_widths = stroke_widths or [2]*len(lines)
line_height = 35
view_width = 152.4
view_height = 101.6
dwg = svgwrite.Drawing(filename=filename)
dwg.viewbox(width=view_width, height=view_height)
dwg.add(dwg.rect(insert=(0, 0), size=('153mm', '102mm'), fill=background_color))
for i in range(3):
initial_coord = np.array([30,-((i*450)+25)])
strokesc = self._sample(lines, [1 for i in lines], [7 for i in lines]);
for offsets, line, color, width in zip(strokesc, lines, stroke_colors, stroke_widths):
if not line:
initial_coord[1] -= line_height
continue
offsets[:, :2] *= random.randint(150, 190)/100
strokesc = drawing.offsets_to_coords(offsets)
strokesc = drawing.denoise(strokesc)
strokesc[:, :2] = drawing.align(strokesc[:, :2])
strokesc[:, 1] *= -1
strokesc[:, :2] -= strokesc[:, :2].min() + initial_coord
prev_eos = 1.0
p = "M{},{} ".format(0, 0)
for x, y, eos in zip(*strokesc.T):
p += '{}{},{} '.format('M' if prev_eos == 1.0 else 'L', x, y)
prev_eos = eos
path = svgwrite.path.Path(p)
path = path.stroke(color=color, width=width, linecap='round').fill("none")
dwg.add(path)
initial_coord[1] -= line_height
dwg.save()
This is my current solution in python which outputs the example above
from How to implement text wrapping in svgwrite?
No comments:
Post a Comment