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);
}
我在插入 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);
}