gpt4 book ai didi

php - 计算图像大小比率以调整大小

转载 作者:IT王子 更新时间:2023-10-29 00:02:05 24 4
gpt4 key购买 nike

我有一个定义的固定宽度和高度来调整图像大小。但是,我对此有疑问,因为图像可以具有任何类型的尺寸比例(可以是垂直水平)。在这种情况下,固定的宽度和高度会导致问题。我想以更智能的方式计算宽度和高度

例如,假设我定义了 宽度 1024px 和高度 768px。我想调整垂直(高度1100px,宽度200px)的图像大小。所以在我的情况下,它会调整为固定的size (1024x768),所以宽度会从100px增加到768px,会非常难看。同样,如果图片的高度小于768px,它会强制将高度增加到768px

因此我想根据原始图像大小比例计算新的图像大小。假设上面的示例图像是否应该调整为 768px 的最大高度,那么宽度呢?它已经小于我的“最大宽度”,即200px,那么宽度是否应该保持不变?还是应该进一步减少?

同样,如果图像的高度为 200 像素,宽度为 1100 像素。所以宽度应该减少到1024px,但是高度呢?

第三个问题是,假设高度和宽度都大于最大高度和最大宽度,比如说width: 1100px and height:4000px。现在由于宽度和高度都大于最大宽度和最大高度,但图像是垂直的,它将使其水平。那么如何检查在这种情况下是否应该根据最大高度或最大宽度调整图像大小?

感谢您对此提供的任何帮助。

最佳答案

这是我个人的图片调整大小代码包中的代码。首先,您需要的数据:

list($originalWidth, $originalHeight) = getimagesize($imageFile);
$ratio = $originalWidth / $originalHeight;

然后,该算法将图像尽可能适合目标尺寸,保持原始纵横比,不拉伸(stretch)图像大于原始尺寸:

$targetWidth = $targetHeight = min($size, max($originalWidth, $originalHeight));

if ($ratio < 1) {
$targetWidth = $targetHeight * $ratio;
} else {
$targetHeight = $targetWidth / $ratio;
}

$srcWidth = $originalWidth;
$srcHeight = $originalHeight;
$srcX = $srcY = 0;

这会裁剪图像以完全填充目标大小,而不是拉伸(stretch)它:

$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 只是宽度和高度的一个数字(方形目标大小)。我相信您可以修改它以使用非方形目标。它还应该让您对可以使用哪些其他大小调整算法有所启发。

关于php - 计算图像大小比率以调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6594089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com