Générer le hachage de UIImage
Je suis en train de comparer deux UIImages à partir du système de fichiers pour voir s'ils sont les mêmes. Évidemment, je ne peux pas utiliser NSObject de la méthode de hachage, car cela renvoie une valeur de hachage de l'objet, et non pas les données réelles de l'image.
J'ai trouvé le code générer un hash MD5 d'une chaîne de caractères, mais je n'ai pas découvert comment le mettre en œuvre pour une UIImage.
Comment dois-je aller sur le hachage d'une UIImage? Ou est ma méthode pour comparer à des images totalement hors?
Vous devez vous connecter pour publier un commentaire.
Je me suis retrouvé en utilisant le code suivant pour accomplir la tâche. Notez que cette fonction nécessite que vous importez
<CommonCrypto/CommonDigest.h>
:CC_MD5_DIGEST_LENGTH
au lieu de16
dans le cas où la valeur ne change jamais.Un peu moins de la solution optimale:
Fondamentalement compare les PNG des données codées des 2 images. Depuis l'image de similarité est un sujet complexe, mieux et plus vite des solutions peuvent être élaborées basées sur ce qu'est exactement le but final est (c'est à dire vous êtes à la recherche pour comparer les images, pixel par pixel, ou tout simplement de similitude approximative, qui pourrait utiliser une version sous-échantillonnée de la source de l'image, etc).
UIImage De Hachage
Swift Code de hachage d'un UIImage avec l'algorithme SHA256 dans swift 4.2. Il existe d'autres algorithmes que vous pouvez utiliser, ce qui peut accélérer ou de générer moins de doublons, mais ce est assez bon pour la plupart des usecases.
Il suffit de déposer le code quelque part dans votre Projet et de l'utiliser comme ceci:
yourUIImage.sha256()
De Transition De L'En-Tête
Par la façon dont vous avez besoin d'un Pontage en-Tête que les importations CommonCrypto. Si vous n'en avez pas, suivez ces étapes:
BridgingHeader
ProjectName/BridgingHeader.h
#import <CommonCrypto/CommonHMAC.h>
dans votre Fichier d'en-TêteDouble Probabilité
Le double de la probabilité est faible, mais vous pouvez mettre à niveau vers SHA512 relativement facile si vous avez d'énormes ensembles de données:
plus élégant de code ci-dessous
JS: