Jeg har haft det præcis samme problem før.
Du er velkommen til at kopiere, hvad jeg gjorde, og forhåbentlig vil det hjælpe dig / løse dit problem.
Sådan løste jeg det
Min første idé, der mislykkedes, ligesom hvad du måske tænker, er, at jeg endte med at lave strenge til hvert enkelt billede (uanset hvilken størrelse). Men jeg fandt hurtigt ud af, at dette fylder din database superhurtigt, og det var ikke effektivt.
Næste mulighed (der virker) var et mindre billede (som din 5px
). idé), og jeg gjorde præcis det, men med 10px
*10px
billeder. Den måde, jeg oprettede 'hash'en på for hvert billede, var imagecolorat()
funktion.
Når du modtager rgb
farver til billedet, rundede jeg dem til nærmeste 50
, så farverne var mindre specifikke. Det nummer (50
) er det, du vil ændre afhængigt af hvor specifikt du ønsker, at dine søgninger skal være.
for eksempel:
// Pixel RGB
rgb(105, 126, 225) // Original
rgb(100, 150, 250) // After rounding numbers to nearest 50
Efter at have gjort dette til hver pixel (10px
*10px
vil give dig 100 rgb()
er tilbage), lavede jeg dem derefter til et array og gemte dem i databasen som base64_encode()
og serialize()
.
Da jeg søgte efter billeder, der ligner hinanden, lavede jeg nøjagtig samme proces til det billede, de ville uploade, og udtrak derefter billed-'hashes' fra databasen for at sammenligne dem alle og se, hvad der matchede afrundet rgb s.
Tips
-
Jo Større at
50
er irgb
afrunding, den mindre specifikke din søgning vil være (og omvendt). -
Hvis du vil have din SQL for at være mere specifik, kan det være bedre at gemme ekstra/specifik info om billedet i databasen, så du kan begrænse de søgninger du får i databasen. f.eks. . hvis billedformatet er
4:3
, træk kun billeder omkring4:3
fra databasen. (osv) -
Det kan være svært at få denne perfekt
5px
*5px
, så et forslag er phpthumb . Jeg brugte det med syntaksen:
Held og lykke makker, håber jeg kunne hjælpe.