Php 将图像均匀分布到库中的列 简要说明

Php 将图像均匀分布到库中的列 简要说明,php,image,gallery,sinemacula,Php,Image,Gallery,Sinemacula,我目前正在建立一个画廊,有三列,每列包含的图像都有相同的宽度,但高度可以不同 列的图像从目录中收集,并使用PHP glob函数放入数组中。这是最简单的部分 画廊的外观示例如下: 问题 当这些图像被动态加载并放置到列中时,列的高度可能会有很大差异 例如,如果在第1列中放置两张肖像照片,在第2列中放置两张风景照片,则这些列将非常不均匀,如下所示: 列的高度不太可能匹配,但我希望它们与给定的图像尽可能接近,因此希望形成一个算法,查看检索到的图像并将其放置在列中,以返回三个高度尽可能接近的列 因此,例如

我目前正在建立一个画廊,有三列,每列包含的图像都有相同的宽度,但高度可以不同

列的图像从目录中收集,并使用PHP glob函数放入数组中。这是最简单的部分

画廊的外观示例如下:

问题 当这些图像被动态加载并放置到列中时,列的高度可能会有很大差异

例如,如果在第1列中放置两张肖像照片,在第2列中放置两张风景照片,则这些列将非常不均匀,如下所示:

列的高度不太可能匹配,但我希望它们与给定的图像尽可能接近,因此希望形成一个算法,查看检索到的图像并将其放置在列中,以返回三个高度尽可能接近的列

因此,例如,脚本将通过重新排序图像并将其按如下方式放置来纠正上述问题:

如果我有正确的算法,我就有能力写这篇文章,我就是想不出最好的步骤来做这件事。有人能提出一些建议吗

可能的解决办法 我想到的其中一种方法我认为会有更好的方法,因为我认为这是有缺陷的:

将所有合并图像的高度相加,除以第3列的数量。这将给我们目标的高度 将图像分发到列数组,当它超过列的高度时,溢出到下一列。 将任何剩余的图像放入第一列,然后放入第二列等。。。
提前谢谢

我建议如下:

假设宽度不变,将图像按从高到短的顺序排列 将图像添加到第一列数组 将图像添加到下一列数组,直到总高度等于或大于上一列数组 重复步骤2和3,直到所有图像都被使用为止,您甚至可以按升序和降序交替填充列,以帮助平衡问题 在将图像添加到列之前,对图像数组进行洗牌,使网格线显示为随机的 调整图像上较短列的垂直边距,使其与最高列的总高度相匹配
希望这有帮助

我建议如下:

假设宽度不变,将图像按从高到短的顺序排列 将图像添加到第一列数组 将图像添加到下一列数组,直到总高度等于或大于上一列数组 重复步骤2和3,直到所有图像都被使用为止,您甚至可以按升序和降序交替填充列,以帮助平衡问题 在将图像添加到列之前,对图像数组进行洗牌,使网格线显示为随机的 调整图像上较短列的垂直边距,使其与最高列的总高度相匹配
希望这有帮助

你可以试试这样的东西。创建阵列:

$totalHeight = array(
 1 => 0, //Column 1
 2 => 0, //Column 2
 3 => 0 //Column 3
);
将图像添加到具有最小$totalHeigth的列,并使用添加的图像高度增加该列的高度

因此,如果在某个循环中有如下数组:

$totalHeight = array(
 1 => 2500, //Column 1
 2 => 1950, //Column 2
 3 => 2450 //Column 3
);

您将知道需要在第2列中添加图像。

您可以尝试这样的方法。创建阵列:

$totalHeight = array(
 1 => 0, //Column 1
 2 => 0, //Column 2
 3 => 0 //Column 3
);
将图像添加到具有最小$totalHeigth的列,并使用添加的图像高度增加该列的高度

因此,如果在某个循环中有如下数组:

$totalHeight = array(
 1 => 2500, //Column 1
 2 => 1950, //Column 2
 3 => 2450 //Column 3
);

您将知道需要在第2列中添加图像。

谢谢您的回答,我们将进一步研究此奖励:要添加另一个随机性维度,您甚至可以调整已完成列的显示顺序,例如3,1,2而不是1,2,3。谢谢您的回答,我们将进一步研究这个优点:为了增加随机性的另一个维度,您甚至可以改变已完成列的显示顺序,例如3,1,2,而不是1,2,3。