code: def multiline_text(
      self,
      xy,
      text,
      fill=None,
      font=None,
      anchor=None,
      spacing=4,
      align="left",
      direction=None,
      features=None,
      language=None,
      stroke_width=0,
      stroke_fill=None,
  ):
      widths = []
      max_width = 0
      lines = self._multiline_split(text)
      line_spacing = (
          self.textsize("A", font=font, stroke_width=stroke_width)[1]
          + spacing
      )
      for line in lines:
          line_width, line_height = self.textsize(
              line,
              font,
              direction=direction,
              features=features,
              language=language,
              stroke_width=stroke_width,
          )
          widths.append(line_width)
          max_width = max(max_width, line_width)
      left, top = xy
      for idx, line in enumerate(lines):
          if align == "left":
              pass  # left = x
          elif align == "center":
              left += (max_width - widths[idx]) / 2.0
          elif align == "right":
              left += max_width - widths[idx]
          else:
              raise ValueError(
                  'align must be "left", "center" or "right"'
              )
          self.text(
              (left, top),
              line,
              fill,
              font,
              anchor,
              direction=direction,
              features=features,
              language=language,
              stroke_width=stroke_width,
              stroke_fill=stroke_fill,
          )
          top += line_spacing
          left = xy[0]
  
imports: import math
  import numbers
  from .None import Image, ImageColor
  from ._util import isStringType
label_desc: Use image node_id 17 for calling the ImageDraw obj's underlying member method code with example usage: obj.multiline_text(xy, text, fill, font, anchor, spacing, align, direction, features, language, stroke_width, stroke_fill) without return types