Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Temukan gambar serupa di (murni) PHP / MySQL

Saya pernah mengalami ini tepat masalah yang sama sebelumnya.

Jangan ragu untuk menyalin apa yang saya lakukan, dan semoga itu akan membantu Anda / menyelesaikan masalah Anda.

Bagaimana saya menyelesaikannya

Ide pertama saya yang gagal, mirip dengan apa yang mungkin Anda pikirkan, adalah saya akhirnya membuat string untuk setiap gambar (tidak peduli berapa ukurannya). Tapi saya segera menyelesaikannya. Ini mengisi database Anda dengan sangat cepat, dan tidak efektif.

Opsi berikutnya (yang berfungsi) adalah gambar yang lebih kecil (seperti 5px Anda ide), dan saya melakukan hal itu, tetapi dengan 10px *10px gambar-gambar. Cara saya membuat 'hash' untuk setiap gambar adalah imagecolorat() fungsi.

Lihat php.net di sini.

Saat menerima rgb warna untuk gambar, saya membulatkannya ke 50 terdekat , sehingga warnanya kurang spesifik. Nomor itu (50 ) yang ingin Anda ubah bergantung pada seberapa spesifik Anda ingin pencarian Anda seperti itu.

misalnya:

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

Setelah melakukan ini pada setiap piksel (10px *10px akan memberi Anda 100 rgb() 's back), saya kemudian mengubahnya menjadi array, dan menyimpannya di database sebagai base64_encode() dan serialize() .

Saat melakukan pencarian untuk gambar yang mirip, saya melakukan proses yang sama persis dengan gambar yang ingin mereka unggah, dan kemudian mengekstrak 'hash' gambar dari database untuk membandingkan semuanya, dan melihat apa yang cocok dengan rgb 's.

Kiat

  • Lebih Besar 50 itu ada di rgb pembulatan, kurang spesifik pencarian Anda akan (dan sebaliknya).

  • Jika Anda ingin SQL . Anda untuk lebih spesifik, mungkin lebih baik menyimpan ekstra/spesifik info tentang gambar di database, sehingga Anda dapat membatasi pencarian yang Anda dapatkan di database. misalnya . jika rasio aspek adalah 4:3 , hanya tarik gambar di sekitar 4:3 dari database. (dll)

  • Mungkin sulit untuk mendapatkan 5px ini dengan sempurna *5px , jadi sarannya adalah phpthumb . Saya menggunakannya dengan sintaks:

Selamat mencoba sobat, semoga bisa membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL – Perbaiki – Kesalahan – Kata Sandi Anda Tidak Memenuhi Persyaratan Kebijakan Saat Ini

  2. Bagaimana saya bisa melindungi dari serangan injeksi SQL menggunakan DBI Perl?

  3. SQL - Periksa apakah kolom bertambah secara otomatis

  4. Ekspresi Tabel Umum di MySQL

  5. Tidak dapat menghentikan MySQL di OS X 10.10