Mysql
 sql >> база данни >  >> RDS >> Mysql

Намерете подобни изображения в (чист) PHP / MySQL

Имах товаточно същия проблем преди.

Чувствайте се свободни да копирате това, което направих, и се надявам, че ще ви помогне / реши проблема ви.

Как го реших

Първата ми идея, която се провали, подобно на това, което може би си мислите, е, че накрая направих низове за всяко едно изображение (без значение какъв размер). Но бързо разбрах, че това запълва вашата база данни супер бързо и не беше ефективно.

Следващата опция (която работи) беше по-малко изображение (като вашето 5px). идея), и направих точно това, но с 10px *10px изображения. Начинът, по който създадох „хеш“ за всяко изображение, беше imagecolorat() функция.

Вижте php.net тук.

При получаване на rgb цветове за изображението, закръглих ги до най-близкия 50 , така че цветовете да са по-малко специфични. Това число (50 ) е това, което искате да промените в зависимост от това колко е конкретно искате вашите търсения да бъдат.

например:

// Pixel RGB
rgb(105, 126, 225) // Original
rgb(100, 150, 250) // After rounding numbers to nearest 50

След като направите това с всеки пиксел (10px *10px ще ви даде 100 rgb() 's back), след това ги превърнах в масив и ги съхраних в базата данни като base64_encode() и serialize() .

Когато търсех изображения, които са подобни, направих точно същия процес с изображението, което искаха да качат, и след това извадих „хешове“ на изображения от базата данни, за да ги сравня всички и да видя какво е съвпадало със закръглен rgb 's.

Съвети

  • По-големият че 50 е в rgb закръгляване, по-малко специфичното вашето търсене ще бъде (и обратно).

  • Ако искате вашия SQL за да бъдем по-конкретни, може да е по-добре да съхранявате екстра/специфично информация за изображението в базата данни, за да можете да ограничите търсенията, които получавате в базата данни. напр. . ако съотношението на страните е 4:3 , изтегляйте изображения само около 4:3 от базата данни. (и др.)

  • Може да е трудно да получите тези идеални 5px *5px , така че предложението е phpthumb . Използвах го със синтаксиса:

Успех колега, надявам се да мога да помогна.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQLI::prepare() , грешка при използване на заместител :something

  2. opencart - Как ръчно да покажа модул в шаблонен файл?

  3. Мигриране на MySQL към PostgreSQL на AWS RDS, част 2

  4. Работа с MySQL дати и времеви марки в Java

  5. АКТУАЛИЗИРАНЕ или ВМЕСВАНЕ на MySQL Python