Имах товаточно същия проблем преди.
Чувствайте се свободни да копирате това, което направих, и се надявам, че ще ви помогне / реши проблема ви.
Как го реших
Първата ми идея, която се провали, подобно на това, което може би си мислите, е, че накрая направих низове за всяко едно изображение (без значение какъв размер). Но бързо разбрах, че това запълва вашата база данни супер бързо и не беше ефективно.
Следващата опция (която работи) беше по-малко изображение (като вашето 5px
). идея), и направих точно това, но с 10px
*10px
изображения. Начинът, по който създадох „хеш“ за всяко изображение, беше imagecolorat()
функция.
При получаване на rgb
цветове за изображението, закръглих ги до най-близкия 50
, така че цветовете да са по-малко специфични. Това число (50
) е това, което искате да промените в зависимост от това колко е конкретно искате вашите търсения да бъдат.
например:
// Pixel RGB
rgb(105, 126, 225) // Original
rgb(100, 150, 250) // After rounding numbers to nearest 50
След като направите това с всеки пиксел (10px
*10px
ще ви даде 100 rgb()
's back), след това ги превърнах в масив и ги съхраних в базата данни като base64_encode()
и serialize()
.
Когато търсех изображения, които са подобни, направих точно същия процес с изображението, което искаха да качат, и след това извадих „хешове“ на изображения от базата данни, за да ги сравня всички и да видя какво е съвпадало със закръглен rgbкод> 's.
Съвети
-
По-големият че
50
е вrgb
закръгляване, по-малко специфичното вашето търсене ще бъде (и обратно). -
Ако искате вашия SQL за да бъдем по-конкретни, може да е по-добре да съхранявате екстра/специфично информация за изображението в базата данни, за да можете да ограничите търсенията, които получавате в базата данни. напр. . ако съотношението на страните е
4:3
, изтегляйте изображения само около4:3
от базата данни. (и др.) -
Може да е трудно да получите тези идеални
5px
*5px
, така че предложението е phpthumb . Използвах го със синтаксиса:
Успех колега, надявам се да мога да помогна.