Tiens on s'était penché un temps sur la question avec rasta pour une demande de jluc.
Il me semble que ça pourrait rester dans un plugin à part car le besoin n'est pas forcément universel : sur des sites de réseaux sociaux comme Fb ça se comprend car les gens téléversent un énorme volume d'images, donc le gain est proportionnel.
En revanche sur un site « lambda » avec une équipe en charge de publier les contenus, des images en doublon ça peut arriver mais ça reste marginal, et donc le gain est sans doute limité.
J'avais un peu cherché les méthodes existantes pour comparer des images, et la technique consiste à prendre une empreinte effectivement. Il y a le md5 de base effectivement, mais aussi pleins d'autres algorithmes.
En se penchant un peu plus sur le sujet ça fait aussi se poser des questions intéressantes : quand est-ce qu'on considère que 2 images sont identiques ?
En fait tout dépend où on place le curseur, par exemple si on prend une image et qu'on opère les changements suivants imperceptibles à l'oeil, est-ce que ça suffit pour considérer que c'est une autre image ?
- changer un pixel
- changer très légèrement la compression
- réduire les dimensions d'un pixel
- changer un unique charactère dans les données exif
- etc.
Au final j'avais retenu cette librairie qui a l'air bien intéressante : https://github.com/jenssegers/imagehash
Elle intègre plusieurs algorithmes et permet de choisir finement le seuil de similitude, en allant d'une similitude absolue (pixels 100% identiques) à une similitude toute relative (en tolérant les watermarks, etc.)
Si on avait poursuivi le projet je serais très certainement parti sur cette lib comme base en tout cas.