Оскільки деякі люди в коментарях до запитання неодноразово казали мені, що це досить тривіально, я фактично це зробив: Додаток, який сортує зображення в поточному каталозі, залишаючи фактичне порівняння головою до голови . 1
Написано в C # для .NET 2. Працює і на Mono (протестований на Linux). Потрібна dcraw на PATH (компільований виконуваний файл для Windows або OS X можна завантажити тут ).
В даний час взаємодія користувачів дуже рудиментарна. Це, ймовірно, може змінитися. Також код - це злий безлад, як зазвичай, з такою хакерською роботою.
Додаток потрібно запустити в каталог, який містить зображення для сортування. Потім він переходить до завантаження всіх зображень, які він може знайти та обробити (JPEG, GIF, PNG, BMP підтримуються в основному, всі інші формати або підтримуються dcraw, або пропускаються, якщо ні). Тримайте кількість зображень розумною, оскільки кожне зображення попередньо завантажується в пам'ять для прискорення відображення - я спробував запустити його в папці з приблизно 600 зображеннями і припинив її приблизно за 2 Гб пам'яті.
Після цього ви отримуєте двопанельний вигляд із зображенням зліва та справа. Клацніть на той, який ви вважаєте найкращим з двох. Потім ви отримаєте два нових зображення. Продовжуйте до завершення. Ви можете закрити програму, якщо хочете, вона відновиться там, де ви зупинилися.
Після того, як були проведені всі необхідні порівняння 2, результат можна побачити:
У ній є відсортований список зображень зліва з найвищою позицією вгорі та найнижчою у нижній частині.
Список справ:
- Дозволити вибір зображень для сортування.
- Вирішіть проблему, що портретні зображення завжди відображаються в альбомній орієнтації (принаймні для сирих зображень. Dcraw дозволяє обертати, але не може це зробити автоматично, і я не бачу простий спосіб знайти це зовні).
- Скорочення використання пам'яті для великої кількості зображень.
- Заздалегідь перемішайте зображення, щоб сходи майже майже однакових зображень порівняно менше порівняли один з одним.
- Змініть синхронізацію між потоком сортування та користувальницьким інтерфейсом, щоб більше не покладатися на
Thread.Sleep
опитування, а використовувати правильні методи синхронізації.
- Додайте попередній перегляд 1: 1 (або принаймні більший). Наразі це не може використовуватися для судження речей за рівнем пікселів.
Тут уже 5:26, тож я перестаю зламати це зараз.
Вихідний код можна знайти в моєму сховищі SVN і випускається під ліцензією MIT. Я вітаю патчі ;-)
Зображення на наведених вище скріншотах - це моє власне.
1 Звичайно, це було не так банально, як інші хотіли б змусити мене повірити. Після тривалої боротьби з Терезами я просто пішов шляхом Драки. Не дуже, але працює з мінімальною кількістю коду.
2 Це в порядку n журналу 2 n, де n - кількість порівняних зображень - значить, на 20 зображень можна очікувати чогось приблизно 20 × 4,3 ≈ 85 порівнянь - я знаю, це не мала кількість. Для 300 зображень, про які ви згадали, ви отримаєте близько 2400. Дійсне число, яке потрібно виконати вручну, (а) різне (оскільки складності опускають лінійний коефіцієнт) і (b), наскільки я спостерігав до цього часу, менше. Щоб уникнути невідповідностей, користувачеві ніколи не буде запропоновано двічі на одних і тих же зображеннях (або в порядку), і ніколи не буде запропоновано однакове зображення з обох сторін.