Ik heb dit exacte eerder hetzelfde probleem.
Voel je vrij om te kopiëren wat ik heb gedaan, en hopelijk zal het je helpen / je probleem oplossen.
Hoe ik het heb opgelost
Mijn eerste idee dat faalde, vergelijkbaar met wat je misschien denkt, is dat ik uiteindelijk strings heb gemaakt voor elke afzonderlijke afbeelding (ongeacht de grootte). Maar ik kwam er snel achter dat dit je database supersnel vult en niet effectief was.
De volgende optie (die werkt) was een kleinere afbeelding (zoals uw 5px
idee), en ik deed precies dat, maar met 10px
*10px
afbeeldingen. De manier waarop ik de 'hash' voor elke afbeelding heb gemaakt, was de imagecolorat()
functie.
Bij ontvangst van de rgb
kleuren voor de afbeelding, ik heb ze afgerond op de dichtstbijzijnde 50
, zodat de kleuren minder specifiek waren. Dat nummer (50
) is wat u wilt wijzigen, afhankelijk van hoe specifiek u wilt dat uw zoekopdrachten zijn.
bijvoorbeeld:
// Pixel RGB
rgb(105, 126, 225) // Original
rgb(100, 150, 250) // After rounding numbers to nearest 50
Nadat je dit met elke pixel hebt gedaan (10px
*10px
geeft je 100 rgb()
's back), heb ik ze vervolgens in een array veranderd en ze in de database opgeslagen als base64_encode()
en serialize()
.
Bij het zoeken naar afbeeldingen die vergelijkbaar zijn, deed ik exact hetzelfde proces met de afbeelding die ze wilden uploaden, en haalde vervolgens de afbeelding 'hashes' uit de database om ze allemaal te vergelijken, en te zien wat overeenkomende afgeronde rgb
Tips
-
De Grotere dat
50
staat in dergb
afronding, hoe minder specifiek uw zoekopdracht zal zijn (en vice versa). -
Als u uw SQL . wilt om specifieker te zijn, kan het beter zijn om extra/specifiek . op te slaan informatie over de afbeelding in de database, zodat u de zoekopdrachten die u in de database krijgt, kunt beperken. bijv. . als de beeldverhouding
4:3
. is , trek alleen afbeeldingen rond4:3
uit de databank. (enz.) -
Het kan moeilijk zijn om dit perfect
5px
te krijgen *5px
, dus een suggestie is phpthumb . Ik gebruikte het met de syntaxis:
Veel succes maat, ik hoop dat ik kan helpen.