Accueil > > > TRI DE COLLECTION D'IMAGES : COMPARE ET LISTE
TRI DE COLLECTION D'IMAGES : COMPARE ET LISTE
Information sur la source
Description
Pour se débarasser des doublons d'images dans les "bibliothèques d'images" (ou photos) perso, de son dd. Ce programme fonctionne en deux temps : 1/ il recherche tout les fichiers images contenu dans le dossier et sous-dossiers, puis il en extrait les informations de dimensions XY, format et taille du fichier. A partir de cette liste, il compare les dimensions des images pour trouver les résolutions identique, puis validé si le format et/ou la taille sont identique 2/ il ouvre les image et réalise une comparaison pixel par pixel des images qui "semble identique" avec le test 1 Une fenêtre de bilan (rapport) ainsi que de prévisu (visio) est disponible pour lire les résultats de l'analyse. grâçe au système de recherche en 2 passes, dont l'une pour le de dégrossissement étant très rapide (100% en ram), on atteint des performance de 10 minutes de travail pour trouvé 900 images identique dans une collection de 17000 images (et grâçe au rapport, on a vu que un dossier complet étais dupliqué) sur un système 1GHz, là où des freeware mettent 5 jours! interêt de la source : - recherche dans les dossiers et sous-dossier avec la fonction Dir() - récupération des headers des fichiers BMP, JPG, GIF et PNG (plus a venir) - ouverture bitmap et comparaison bit-à-bit beaucoup plus rapide que GetPixel ou .Point grâçe à GetBitmapBits (alter-ego de GetDIBits) - et en plus les résultats sont exhaustif à 99,5% :) remarques : - Si l'image est corrompu ou partiellement endommagé, le programme l'ignorera. - Certain fichiers portant l'extension .jpg ne sont pas au format JFIF mais Exif (cas des photos numérique) et le programme à quelques difficultés à trouvé les dimensions XY de ces dernières (considéré alors comme = 0, donc ignoré par les tests) Pensez à compilé le programme, il est 30% plus rapide en version .exe !
Source
- 'beaucoup trop long, voir Zip
-
- 'extrait de CompKern.bas : la récupération de la résolution XY :
- Private Sub GET_PicXYRes(InFormat As Long, OutXres As Long, OutYres As Long)
- Dim bMarker As Byte
- Dim iLength As Byte
- Dim lSeek As Long
- Dim iXres As Integer
- Dim iYres As Integer
- Dim Checking As Integer
- Dim HWtbl(1 To 4) As Byte
- Dim JpegDebug As Long
-
- Select Case InFormat
- Case 1 ' BMP
- Get #1, 19, OutXres
- Get #1, 23, OutYres
- Case 2 ' JPG
- 'le format JPEG standard est rarement respecté, aussi il faut procéder a différent "saut"
- 'avant de trouver le marqueur SOF0, auquel est rattaché la résolution
-
- Get #1, 3, Checking
- If Checking <> &HE0FF Then
- 'non-JFIF (exif ?)
- i = 5
- ts = LOF(1) - 1
- Do Until Checking = &HE0FF Or Checking = &HD8FF Or Checking = &HC0FF
- Get #1, i, Checking
- i = i + 1
- If i >= ts Then
- 'format jpeg incompatible ou inconnu
- OutXres = 0
- OutYres = 0
- Exit Sub
- End If
- Loop
- lSeek = i
- Else
- 'JFIF
- lSeek = 21
- End If
-
-
- JpegMarkSeek:
- Get #1, lSeek, bMarker
- If bMarker = 255 Then
- Get #1, lSeek + 1, bMarker
- If bMarker >= 192 And bMarker <= 195 Then 'marqueur SOF0 , SOF1 ou SOF2 de base
- Get #1, lSeek + 5, HWtbl
- OutYres = HWtbl(1) * 256 + HWtbl(2)
- OutXres = HWtbl(3) * 256 + HWtbl(4)
- 'OutXres = CLng(iXres)
- 'OutYres = CLng(iYres)
-
-
- Get #1, LOF(1) - 1, Checking
- If Checking <> &HD9FF And Checking <> 0 Then
- 'image buggé (fin incorrect)
- OutXres = 0
- OutYres = 0
- End If
-
- Else
- lSeek = lSeek + 1
- GoTo JpegMarkSeek
- End If
-
- Else
- lSeek = lSeek + 1
- GoTo JpegMarkSeek
-
- 'non-JFIF
- OutXres = 0
- OutYres = 0
- End If
- Case 3 ' GIF
- Get #1, 7, iXres
- Get #1, 9, iYres
- OutXres = CLng(iXres)
- OutYres = CLng(iYres)
- Case Else
- OutXres = 0
- OutYres = 0
- End Select
- End Sub
'beaucoup trop long, voir Zip
'extrait de CompKern.bas : la récupération de la résolution XY :
Private Sub GET_PicXYRes(InFormat As Long, OutXres As Long, OutYres As Long)
Dim bMarker As Byte
Dim iLength As Byte
Dim lSeek As Long
Dim iXres As Integer
Dim iYres As Integer
Dim Checking As Integer
Dim HWtbl(1 To 4) As Byte
Dim JpegDebug As Long
Select Case InFormat
Case 1 ' BMP
Get #1, 19, OutXres
Get #1, 23, OutYres
Case 2 ' JPG
'le format JPEG standard est rarement respecté, aussi il faut procéder a différent "saut"
'avant de trouver le marqueur SOF0, auquel est rattaché la résolution
Get #1, 3, Checking
If Checking <> &HE0FF Then
'non-JFIF (exif ?)
i = 5
ts = LOF(1) - 1
Do Until Checking = &HE0FF Or Checking = &HD8FF Or Checking = &HC0FF
Get #1, i, Checking
i = i + 1
If i >= ts Then
'format jpeg incompatible ou inconnu
OutXres = 0
OutYres = 0
Exit Sub
End If
Loop
lSeek = i
Else
'JFIF
lSeek = 21
End If
JpegMarkSeek:
Get #1, lSeek, bMarker
If bMarker = 255 Then
Get #1, lSeek + 1, bMarker
If bMarker >= 192 And bMarker <= 195 Then 'marqueur SOF0 , SOF1 ou SOF2 de base
Get #1, lSeek + 5, HWtbl
OutYres = HWtbl(1) * 256 + HWtbl(2)
OutXres = HWtbl(3) * 256 + HWtbl(4)
'OutXres = CLng(iXres)
'OutYres = CLng(iYres)
Get #1, LOF(1) - 1, Checking
If Checking <> &HD9FF And Checking <> 0 Then
'image buggé (fin incorrect)
OutXres = 0
OutYres = 0
End If
Else
lSeek = lSeek + 1
GoTo JpegMarkSeek
End If
Else
lSeek = lSeek + 1
GoTo JpegMarkSeek
'non-JFIF
OutXres = 0
OutYres = 0
End If
Case 3 ' GIF
Get #1, 7, iXres
Get #1, 9, iYres
OutXres = CLng(iXres)
OutYres = CLng(iYres)
Case Else
OutXres = 0
OutYres = 0
End Select
End Sub
Conclusion
mode d'emploi :
1/ choisissez le dossier de base de votre collection d'image a trier
2/ cliquer sur "build" pour lister les images existantes
3/ cliquer sur "begin" pour entamer le comparatif rapide puis bit-à-bit.
4/ cliquer, le cas échéant (résultat > 0) sur "visio" et "rapport" pour connaitre les images en double trouvé.
bug connus : - quelques format jpeg corrompu/malformé non géré.
update mai 2003 : - module Dir.bas optimisé (vitesse +5% ) - module CompKern.bas optimisé (vitesse pass1 x10! )
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc [HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Très bonne après-midi passée lors cette conférence avec le W3C, organisée par L' Inria sur les nouveaux standards, ce Mardi 14 Février, on sent vraiment que çà bosse au W3C, et l'avenir est très très prometteur pour le HTML5, notamment ...
Cliquez pour lire la suite de l'article par Gio
Forum
RE : VITESSERE : VITESSE par ossama261988
Cliquez pour lire la suite par ossama261988
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|