title: Image aspect ratio using Reportlab in Python
body: <p>I want to insert an image inside a frame. I found two ways to do this:</p>
  
  <ol>
  <li>drawImage(self, image, x, y, width=None, height=None, mask=None, preserveAspectRatio=False, anchor='c')</li>
  <li>Image(filename, width=None, height=None)</li>
  </ol>
  
  <p>My question is: how can I add an image in a frame while preserving its aspect ratio?</p>
  
  <pre><code>from reportlab.lib.units import cm
  from reportlab.pdfgen.canvas import Canvas
  from reportlab.platypus import Frame, Image
  
  c = Canvas('mydoc.pdf')
  frame = Frame(1*cm, 1*cm, 19*cm, 10*cm, showBoundary=1)
  
  """
  If I have a rectangular image, I will get a square image (aspect ration 
  will change to 8x8 cm). The advantage here is that I use coordinates relative
  to the frame.
  """
  story = []
  story.append(Image('myimage.png', width=8*cm, height=8*cm))
  frame.addFromList(story, c)
  
  """
  Aspect ration is preserved, but I can't use the frame's coordinates anymore.
  """
  c.drawImage('myimage.png', 1*cm, 1*cm, width=8*cm, preserveAspectRatio=True)
  
  c.save()
  </code></pre>