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
50ist imrgbRundung, 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:3ist , ziehen Sie Bilder nur um4:3herum aus der Datenbank. (usw.) -
Es kann schwierig sein, diese perfekten
verwendet5pxhinzubekommen *5px, ein Vorschlag ist also phpthumb . Ich habe es mit der Syntax:
Viel Glück Kumpel, hoffe ich konnte helfen.