Ich hatte das genau gleiches Problem vorher.
Fühlen Sie sich frei, zu kopieren, was ich getan habe, und hoffentlich wird es Ihnen helfen / Ihr Problem lösen.
Wie ich es gelöst habe
Meine erste Idee, die fehlschlug, war, ähnlich wie Sie vielleicht denken, dass ich für jedes einzelne Bild (egal welche Größe) Zeichenfolgen erstellte. Aber ich habe schnell herausgefunden, dass dies Ihre Datenbank superschnell füllt und nicht effektiv war.
Die nächste Option (die funktioniert) war ein kleineres Bild (wie Ihr 5px
Idee), und genau das habe ich gemacht, aber mit 10px
*10px
Bilder. Die Art und Weise, wie ich den 'Hash' für jedes Bild erstellt habe, war der imagecolorat()
Funktion.
Beim Empfang von rgb
Farben für das Bild habe ich auf die nächsten 50
gerundet , sodass die Farben weniger spezifisch waren. Diese Zahl (50
) ist, was Sie ändern möchten, je nachdem, wie spezifisch Sie möchten, dass Ihre Suchanfragen.
zum Beispiel:
// Pixel RGB
rgb(105, 126, 225) // Original
rgb(100, 150, 250) // After rounding numbers to nearest 50
Nachdem Sie dies mit jedem Pixel (10px
*10px
gibt Ihnen 100 rgb()
's back), habe ich sie dann in ein Array umgewandelt und sie in der Datenbank als base64_encode()
gespeichert und serialize()
.
Bei der Suche nach ähnlichen Bildern habe ich genau das gleiche Verfahren für das Bild durchgeführt, das sie hochladen wollten, und dann Bild-„Hashes“ aus der Datenbank extrahiert, um sie alle zu vergleichen und zu sehen, was übereinstimmende gerundete rgb
Tipps
-
Der Größere dass
50
ist imrgb
Rundung, die weniger spezifisch Ihre Suche lautet (und umgekehrt). -
Wenn Sie möchten, dass Ihr SQL Um genauer zu sein, kann es besser sein, extra/specific zu speichern Informationen über das Bild in der Datenbank, damit Sie die Suche in der Datenbank einschränken können. zB . wenn das Seitenverhältnis
4:3
ist , ziehen Sie Bilder nur um4:3
herum aus der Datenbank. (usw.) -
Es kann schwierig sein, diese perfekten
verwendet5px
hinzubekommen *5px
, ein Vorschlag ist also phpthumb . Ich habe es mit der Syntax:
Viel Glück Kumpel, hoffe ich konnte helfen.