Photoslider — Утилита Gpl Для Сортировки Фотографий.



Цель ФотоСлайдера Я прочитал несколько фотоблогов, в которых иногда есть «фотопачки/сессии/отчеты».

Плюс мои друзья носят с собой гигабайты своих фотографий.

Как только фотографий становится достаточно много (по 10-20 тысяч каждая), я их просматриваю, оставляя избранные 0,001% из них для своих обоев.

Камеры у всех становятся лучше, фотографии весят всё больше, что не может не сказаться на скорости их загрузки.

Возникла проблема с тем, как эффективно все это очистить.

Практически все фотографии удаляются после однократного просмотра, небольшое количество избранных перемещается в папку обоев.

Сначала я использовал Picasa или FSViewer. Но по какой-то причине оба не были удовлетворительными.

  • Picasa не хочет показывать фотографии на весь экран, их нельзя удалить нажатием одной кнопки (запрашивает подтверждение для каждой фотографии), переход к следующей фотографии происходит довольно медленно (если просматривать фотографии ~24 МП на ноутбук, это очень неприятно);
  • FSViewer тоже оказался не особо быстрым, с лучшим удалением, но все равно медленным.

    Кроме того, он до сих пор не понимает юникод в именах файлов (давно просил разработчиков добавить поддержку).

Немного помучавшись, я начал писать свою утилиту, которой стал PhotoSlider. Ниже приведены подробности реализации и управления.



Как использовать
Установки нет, запускается из консоли.

Он понимает только 2 параметра:

  • как - запускать на всех мониторах
  • --movepath [путь] — куда переместить избранное (по умолчанию создается папка _good).

Рекурсивно сканирует текущую папку (с подпапками), всегда разворачивается на весь экран.

Если есть возможность вывести на экран несколько фотографий (например, если 2 панорамы поместятся на экране вертикально, не мешая друг другу), то будет показано несколько.

Управление следующее (невозможно настроить за ненадобностью, по крайней мере у меня).

  • побег - Выход;
  • космос — показать следующую порцию фотографий, ничего не делая с текущими;
  • дель - удалить все.

    Будьте осторожны, они удаляются без всяких запросов и мимо корзины!

  • м — переместить все фотографии «в избранное»;
  • стрелки вверх/вниз - «добавить/удалить строку».

    Те.

    Максимальное вертикальное разрешение фотографии делится на количество строк.

    Удобно просматривать пакетно, когда много неинтересных фотографий;

  • стрелки влево/вправо - то же самое, только со строками;
  • Щелчком мыши можно просмотреть фотографию «на весь экран», если количество строк/столбцов > 0, отдельно от остальных фотографий.

    На правой кнопке есть меню, дублирующее кнопки



Как это технически реализовано?
Фотографии загружены в отдельную тему.

Чтобы не тратить время на масштабирование при отображении на экране, все фотографии масштабируются (с сохранением пропорций) под разрешение экрана в одной (специальной) теме.

Отдельный поток обрабатывает комбинацию фотографий для следующего экрана.

При поступлении команды с объединенного экрана сначала показываются новые фотографии (чтобы пользователь увидел их с как можно меньшей задержкой) и только потом освобождаются/удаляются/перемещаются старые фотографии.

Чтобы не заполнять всю память, есть ограничение на количество фотографий, висящих в очереди (теперь это абстрактное ограничение: сумма всех фотографий (ширина*высота*4) < 1024 * 1024 * 1024. I want to change everything to a limit depending on the available RAM, but for now there are more interesting things to do).

По ощущениям работает гораздо быстрее, чем другие просмотрщики (для описанных выше целей), но я ожидал получить большую скорость.

Похоже где-то есть узкое место, но я его пока не профилировал из-за отсутствия профайлера.

Среди замеченных, но не уловленных дефектов:

  • некоторые фотографии отказываются загружаться, хотя FSViewer открывает их без проблем.

    Кажется, проблема где-то внутри функций Windows, которые использует .

    NET Framework;

  • Иногда невозможно удалить определенные файлы.

    Я не мог погуглить, почему их не удаляют;

  • иногда вы получаете неправильное масштабирование, если часто играете с изменением количества строк/столбцов;
Я не проверял весь функционал по нескольким последним коммитам, возможно где-то ещё что-то вылезет. Все это написано на C# под .

NET 3.5. Часто писалось по частям и на скорую руку, архитектура приложения очень запутанная.

Надеюсь, что как-нибудь соберусь и приведу код к нормальной читабельности.

Комментариев по большей части нет по той же причине (+ изначально я не планировал развивать дальше «приложения на один-два раза»).

Проверено только под Windows. Я еще ничего не писал под Mono; Не знаю, скомпилируется или нет. Хотя у меня все больше возникает соблазн перейти на Ubuntu, возможно, в будущем я переведу ее в моно.

Исходники размещены на Google-код под лицензией GPL3. Надеюсь, эта утилита будет полезна еще кому-нибудь, кроме меня.

Теги: #просмотр изображений #лайфхак #gpl3 #.

NET #C++ #занимаюсь пиаром

Вместе с данным постом часто просматривают: