我有一个固定的宽度和高度来调整图像大小。但是,我对此有一个问题,因为图像可以具有任何类型的尺寸比(可以是 垂直 或 水平 )。在这种情况下,固定的宽度和高度会引起问题。我想以更智能的方式计算 宽度和高度 。
例如,假设我定义了 width 1024px和height 768px 。我想调整垂直图像的尺寸 (高度1100px和宽度200px) 。因此,在我的情况下,它将调整为固定 大小(1024x768) ,因此宽度将从 100px增加到768px ,并且非常难看。同样,如果图像的高度小于 768px ,则通过强制将高度增加到 768px 。
因此,我想根据原始图像尺寸比率来计算新图像尺寸。可以说,如果上面的示例图片应调整为最大高度 768px ,那么宽度呢?它已经小于我的“最大宽度”( 200px) ,因此宽度应该保持不变吗?还是应该进一步减少?
同样,如果图片 的高度为200px,宽度为1100px 。所以宽度应该 减小到1024px ,但是高度呢?
第三个问题是,假设高度和宽度都大于最大高度和最大宽度,则假设 宽度:1100px和高度:4000px 。现在,由于width和height都大于最大宽度和最大高度,但是图像是垂直的,因此它将变为水平。那么,在这种情况下,如何检查是否应该根据最大高度或最大宽度来调整图像大小?
我对此表示感谢。
这是我个人抓取图像大小调整代码的代码。首先,您需要的数据:
list($originalWidth, $originalHeight) = getimagesize($imageFile); $ratio = $originalWidth / $originalHeight;
然后,此算法会尽最大可能使图像适合目标尺寸,同时保持原始宽高比,而不会拉伸大于原始图像的尺寸:
$targetWidth = $targetHeight = min($size, max($originalWidth, $originalHeight)); if ($ratio < 1) { $targetWidth = $targetHeight * $ratio; } else { $targetHeight = $targetWidth / $ratio; } $srcWidth = $originalWidth; $srcHeight = $originalHeight; $srcX = $srcY = 0;
这会裁剪图像以完全填充目标尺寸,而不是拉伸图像:
$targetWidth = $targetHeight = min($originalWidth, $originalHeight, $size); if ($ratio < 1) { $srcX = 0; $srcY = ($originalHeight / 2) - ($originalWidth / 2); $srcWidth = $srcHeight = $originalWidth; } else { $srcY = 0; $srcX = ($originalWidth / 2) - ($originalHeight / 2); $srcWidth = $srcHeight = $originalHeight; }
这实际上是调整大小:
$targetImage = imagecreatetruecolor($targetWidth, $targetHeight); imagecopyresampled($targetImage, $originalImage, 0, 0, $srcX, $srcY, $targetWidth, $targetHeight, $srcWidth, $srcHeight);
在这种情况下,$size宽度和高度(目标尺寸的平方)只是一个数字。我确定您可以修改它以使用非正方形目标。它还应该给您启发,您可以使用其他调整大小的算法。
$size