【发布时间】:2012-08-16 10:53:20
【问题描述】:
我有一个脚本,它对于一个实际简单的任务来说非常庞大,因为它经常嵌套。它的作用是这样的:
- 获取图像的当前大小
- 获取新的最大尺寸
- 计算图像要调整到的尺寸(始终保持纵横比):
- 如果图像小于新尺寸:保持原始尺寸
- 如果最大新维度具有 x 和 y 值:缩放图像以适应这两个值
- 如果最大新维度只有一个 x 值:缩放以适应至少 x
- 如果最大新维度只有一个 y 值:缩放以适应至少 y
这是脚本:
//example values, whereas 'new' is the maximum range for the new image
$dimensions = array(1920,1200);
$dimensionsNew = array(160, 0);
// percentage the image must be scaled
$percentages = array(0,0);
//calculate scale range
if ($dimensionsNew[0] != 0) $percentages[0] = $dimensions[0] / $dimensionsNew[0];
if ($dimensionsNew[1] != 0) $percentages[1] = $dimensions[1] / $dimensionsNew[1];
//get new dimensions
if ( ($dimensions[0] <= $dimensionsNew[0]) && ($dimensions[1] <= $dimensionsNew[1]) ) {
$dimensionsNew[0] = $dimensions[0];
$dimensionsNew[1] = $dimensions[1];
} elseif ($dimensionsNew[0] == 0) {
if ($dimensions[1] <= $dimensionsNew[1]) {
$dimensionsNew[0] = $dimensions[0];
$dimensionsNew[1] = $dimensions[1];
} else {
$dimensionsNew[0] = ceil($dimensions[0] / $percentages[1]);
}
} elseif ($dimensionsNew[1] == 0) {
if ($dimensions[0] <= $dimensionsNew[0]) {
$dimensionsNew[0] = $dimensions[0];
$dimensionsNew[1] = $dimensions[1];
} else {
$dimensionsNew[1] = ceil($dimensions[1] / $percentages[0]);
}
} elseif ($percentages[0] < $percentages[1]) {
$dimensionsNew[1] = ceil($dimensions[1] / $percentages[1]);
} else {
$dimensionsNew[0] = ceil($dimensions[0] / $percentages[0]);
}
它做了它应该做的。但是有没有更简单的方法来做到这一点?我想我看这段代码太频繁了,找不到优化的方法。
【问题讨论】:
-
只是对代码可读性的注释,将您的数组元素命名为
$dimensions = array(x = 1920, y = 1200);将让您稍后参考x & y。 -
好主意。比 0|1 更容易维护 - 我可以看到。
标签: php image-resizing dimensions