我在我的照片网站上按颜色功能进行了搜索。为此,我遍历了一张图像中的所有像素,并在我的数据库中记录了前 10 个像素。我遇到的问题是,因为我的照片有人物主题,我的搜索者实际上是在搜索主题的颜色,而不是背景(天空、铺路、草等)。我知道这将很难完全消除,但我想我需要稍微改变颜色以获得更好的效果。
请看这张照片的例子:
左边的例子是我正在做的,收集所有像素。黑色和灰色占据了该选择的前 3 种颜色,粉红色第 4 位,背景女孩连衣裙的海军蓝色第 5 位——我只收集前 5 种颜色,而我的主色并不是那么好。如果我可以改变循环像素的方式,只选择绿色框中的颜色(右),我认为这会对我的收藏产生一点影响。这是我很难看到数学的地方。
我正在这样做,以循环遍历所有像素:
$size = @getimagesize($imageFile);
for ($x = 0; $x < $size[0]; $x += $granularity) {
for($y = 0; $y < $size[1]; $y += $granularity) {
// do stuff here
}
但我需要改变它,使顶部和底部大约减少 5%,侧面大约减少 8-10%,然后循环通过新的选择。
我确实开始了,但后来停止了,因为我不确定我的计算是否返回奇数或像 1.030044858 这样的数字。
这是我走了多远,希望有人可以帮助清理它并让我越过这条线:
$granularity = 4;
$granularity = max(1, abs((int)$granularity));
$size = @getimagesize($imageFile);
$sizeX = $size[0];
$sizeY = $size[1];
$xPerCent = 8; // for me to set & adjust
$yPerCent = 5; // for me to set & adjust
$xSelectionWidth = ($sizeX/100) * $xPerCent;
$xSelectionWidth = $sizeX - ($xSelectionWidth * 2);
$xSelectionHeight = ($sizeY/100) * $yPerCent;
$xSelectionHeight = $sizeY - ($ySelectionHeight * 2);
$xSelectionStart = 0;
$xSelectionEnd = 0;
$ySelectionStart = 0;
$ySelectionEnd = 0;
for($x = 0; $x < $size[0]; $x += $granularity) {
for($y = 0; $y < $size[1]; $y += $granularity) {
// do stuff here
}
}