Python 如何设置Reportlab中图像的最大大小,而无需重新缩放?

Python 如何设置Reportlab中图像的最大大小,而无需重新缩放?,python,image,pdf,reportlab,Python,Image,Pdf,Reportlab,我正在尝试使用Reportlab生成pdf。这是可以接受的容易。我有一个类似下面的函数,它返回图像,我只是将它添加到文档中 def create_logo(bsolute_path): image = Image(absolute_path) image.drawHeight = 1 * inch image.drawWidth = 2 * inch return [image] 它工作,但不是我想要的。我的问题是它重新缩放了我的图像。 例如,如果我有一张3000px(

我正在尝试使用Reportlab生成pdf。这是可以接受的容易。我有一个类似下面的函数,它返回图像,我只是将它添加到文档中

def create_logo(bsolute_path):
   image = Image(absolute_path)
   image.drawHeight = 1 * inch
   image.drawWidth = 2 * inch
   return [image]
它工作,但不是我想要的。我的问题是它重新缩放了我的图像。 例如,如果我有一张3000px(宽)x1000px(高)的图像,其比例为1到3,我在pdf中得到一张重新缩放的图像:1到2

我基本上只想指定最大宽度和高度,如果图像太大,让reportlab调整大小(而不是重新缩放)

这可以在Reportlab中完成,还是我应该自己完成


谢谢

您可以设置
preserveAspectRatio=True
。所以比例应该是1:3

drawImage(image, x, y, width=None, height=None, mask=None, preserveAspectRatio=True, anchor='c')
可以将比例因子作为常量添加

希望这能有所帮助。

我也发现:

但最后我用了这个方法:

def create_logo(absolute_path):
    image = Image(absolute_path)
    image._restrictSize(2 * inch, 1 * inch)
这对我很有用:

image = Image(absolute_path,width=2*inch,height=1*inch,kind='proportional')

虽然我的回答对你来说太晚了,但对其他有同样问题的人来说。您的图像缩放问题可以通过了解图像的dpi来解决。 我有一个59x19像素的图像,我想粘贴到pdf上。我是如何成功地做到这一点的,如下所示

from reportlab .pdfgen import canvas
from reportlab.lib.utils import ImageReader
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm
xloc=10
yloc=10
c=canvas.Canvas(pdfPath,pagesize=A4) # put you pdf path here
c.draw(image, xloc,yloc,15*mm,5*mm)
现在,一个96dpi的59px转换为15mm,同样,96dpi的19px转换为5mm。 看见这将保留您的纵横比。我还观察到一些奇怪的事情。59px实际上是15.61041667mm,但如果我也使用小数部分,图像就会模糊