TCPDF 图像纵横比问题

TCPDF Image aspect ratio issue

我在插入 TCPDF 图像时遇到问题。

这是我正在使用的代码:

$this->Image($this->data['logo'], PDF_MARGIN_LEFT, 5, 60, 20, '', '', 'M', true);

我已将调整大小设置为 true,但 TCPDF 库不考虑图像比例。

如何强制保留图像比例?

有关信息,我使用的是 TCPDF 6.2.8 (2015-04-29)。

感谢您的支持, 大卫.

如果您想保持图像的纵横比,只需将宽度参数或高度参数设置为零即可。

在您的示例中,我可以看到您已将宽度设置为 60,将高度设置为 20。尝试将宽度设置为 0,将高度保留为 20 - 我认为您会得到一个不错的结果。您也可以不使用调整大小参数。

这是我找到的解决方案:

    if ('' != $this->data['logo'] && is_file($this->data['logo'])) {
        // select only one constraint : height or width. 60x20 image emplacement => ratio = 3 (60/20)
        list($image_w, $image_h) = getimagesize($this->data['logo']);
        if (3 > $image_w / $image_h) list($w, $h) = array(0, 20);
        else list($w, $h) = array(60, 0);

        $this->Image($this->data['logo'], PDF_MARGIN_LEFT, 5, $w, $h, '', '', 'M');
    }

我找到了图像放置比例 (60/20=3),我将它与图像比例进行比较,然后在设置宽度或高度之间进行选择。

感谢 JamesG 帮助我找到解决方案。

大卫.

我在 的基础上创建了一个函数。将宽度、高度和图像路径传递给它。它读取图像大小,然后根据需要将 $w$h 设置为零。这与 David 的代码的想法完全相同,但他为了他的目的硬编码了特定的图像比例,而这个版本更通用。

function imageBox($file, $w, $h)
{
    if (!$w or !$h) {
        // If the input has set one of these to zero, it should be calling TCPDF
        // image directly.
        throw new Exception('You must provide a value for both width and height');
    }
    // First, we grab the width and height of the image.
    list($image_w, $image_h) = getimagesize($file);

    // Constrain the image to be within a certain boundary by doing maths.
    if (($w / $h) > ($image_w / $image_h)) {
        $w = 0;
    } else {
        $h = 0;
    }

    return array($w, $h);
}