Poiché alcune persone nei commenti alle domande mi hanno ripetutamente detto che era piuttosto banale, in realtà l'ho fatto: un'applicazione che ordina le immagini nella directory corrente lasciando all'utente il confronto diretto . 1
Scritto in C # per .NET 2. Funziona su Mono (testato finora su Linux). Richiede dcraw sul PERCORSO (eseguibile compilato per Windows o OS X può essere scaricato qui ).
Attualmente l'interazione dell'utente è molto rudimentale. Questo è probabilmente soggetto a modifiche. Anche il codice è un casino diabolico come al solito con un tale hack-job.
L'applicazione deve essere avviata in una directory che contiene le immagini da ordinare. Procede quindi a caricare tutte le immagini che riesce a trovare e gestire (JPEG, GIF, PNG, BMP sono supportati in modo nativo, tutti gli altri formati sono supportati da dcraw o saltati in caso contrario). Mantieni ragionevole il numero di immagini, poiché ogni immagine è precaricata in memoria per velocizzare la visualizzazione: ho provato ad avviarla su una cartella con circa 600 immagini e l'ho terminata con un utilizzo della memoria di circa 2 GiB.
Successivamente si ottiene una vista a due riquadri con un'immagine a sinistra e a destra. Fai clic su quello che ritieni sia il migliore dei due. Riceverai quindi due nuove immagini. Continua fino al termine. Puoi chiudere il programma se vuoi, riprenderà da dove eri rimasto.
Dopo aver effettuato tutti i confronti necessari 2, si può vedere il risultato:
Ha l'elenco ordinato delle immagini a sinistra con il più alto nella parte superiore e il più basso nella parte inferiore.
Lista di cose da fare:
- Consenti la selezione delle immagini da ordinare.
- Risolvi il problema che le foto di ritratti sono sempre visualizzate in orientamento orizzontale (almeno per le immagini grezze. Dcraw consente la rotazione ma non può farlo automaticamente e non vedo un modo semplice per scoprirlo esternamente).
- Riduci l'utilizzo della memoria per un gran numero di immagini.
- Mischia le immagini in anticipo in modo che le raffiche di immagini quasi identiche abbiano meno probabilità di essere confrontate direttamente l'una con l'altra.
- Modifica la sincronizzazione tra il thread di ordinamento e l'interfaccia utente per non fare più affidamento
Thread.Sleep
e polling ma per utilizzare i metodi di sincronizzazione corretti.
- Aggiungi un'anteprima 1: 1 (o almeno una più grande). Attualmente questo non può essere usato per giudicare le cose a livello di pixel.
Sono le 5:26 qui, quindi smetto di hackerare adesso.
Il codice sorgente può essere trovato nel mio repository SVN ed è rilasciato sotto la licenza MIT. Accolgo con favore le patch ;-)
Le immagini nelle schermate sopra sono mie.
1 Naturalmente non è stato così banale come gli altri vorrebbero farmi credere. Dopo una lunga lotta con Libraw, ho semplicemente seguito la via del Draw. Non carino, ma funziona con una quantità minima di codice.
2 Questo è nell'ordine di n log 2 n dove n è il numero di immagini a confronto - quindi, per 20 immagini ci si può aspettare qualcosa di circa 20 × 4.3 ≈ 85 confronti - Lo so, non è un piccolo numero. Per le 300 immagini che hai menzionato avresti circa 2400. Il numero effettivo che deve essere eseguito manualmente è (a) diverso (poiché le complessità omettono il fattore lineare) e (b) per quanto ho osservato finora, più piccolo. Per evitare incoerenze l'utente non verrà mai richiesto due volte sulle stesse due immagini (entrambi gli ordini) e mai richiesto con la stessa immagine su entrambi i lati.