J'ai eu ce exact même problème avant.
N'hésitez pas à copier ce que j'ai fait, et j'espère que cela vous aidera / résoudra votre problème.
Comment j'ai résolu le problème
Ma première idée qui a échoué, similaire à ce que vous pensez peut-être, est que j'ai fini par créer des chaînes pour chaque image (quelle que soit sa taille). Mais j'ai rapidement compris que cela remplissait votre base de données très rapidement et n'était pas efficace.
L'option suivante (qui fonctionne) était une image plus petite (comme votre 5px
idée), et j'ai fait exactement cela, mais avec 10px
*10px
images. La façon dont j'ai créé le "hachage" pour chaque image était le imagecolorat()
fonction.
Lors de la réception du rgb
couleurs pour l'image, je les ai arrondies au 50
le plus proche , de sorte que les couleurs étaient moins spécifiques. Ce nombre (50
) correspond à ce que vous souhaitez modifier en fonction de la spécificité vous voulez que vos recherches soient.
par exemple :
// Pixel RGB
rgb(105, 126, 225) // Original
rgb(100, 150, 250) // After rounding numbers to nearest 50
Après avoir fait cela à chaque pixel (10px
*10px
vous donnera 100 rgb()
est de retour), je les ai ensuite transformés en tableau et les ai stockés dans la base de données sous le nom base64_encode()
et serialize()
.
Lors de la recherche d'images similaires, j'ai suivi exactement le même processus pour l'image qu'ils souhaitaient télécharger, puis j'ai extrait les "hachages" d'image de la base de données pour les comparer tous et voir ce qui correspondait à rgb
s.
Conseils
-
Le plus grand ce
50
est dans lergb
arrondi, le moins spécifique votre recherche sera (et vice versa). -
Si vous voulez que votre SQL pour être plus précis, il peut être préférable de stocker extra/specific informations sur l'image dans la base de données, afin que vous puissiez limiter les recherches que vous obtenez dans la base de données. par exemple . si le format d'image est
4:3
, tirez uniquement les images autour de4:3
de la base de données. (etc.) -
Il peut être difficile d'obtenir parfaitement ce
5px
*5px
, donc une suggestion est phpthumb . Je l'ai utilisé avec la syntaxe :
Bonne chance mon pote, j'espère pouvoir t'aider.