sql >> Database teknologi >  >> RDS >> Mysql

Find lignende billeder i (ren) PHP / MySQL

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.

Se php.net her.

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 i rgb 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 omkring 4: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.



  1. Sådan fungerer APPROX_COUNT_DISTINCT() i SQL Server

  2. Jobkø som SQL-tabel med flere forbrugere (PostgreSQL)

  3. Mysql:Vælg alle data mellem to datoer

  4. SQL:Hent produkter fra en kategori, men skal også være i et andet sæt kategorier