Представьте себе, что у вас есть некоторое множество фотографий, которые требуется распределить так, чтобы точно и быстро находить нужное содержимое, изображённое на этих фотографиях. Конечно, речь в данном случае идёт о компьютере и о фотографиях в виде файлов.
Какие могут быть цели этого?
а) все эти фотографии\изображения - так называемые референсы, то есть вы пользуетесь ими для рисования\моделирования как изображениями-образцами. Либо это фототекстуры, также необходимая вещь в компьютерной графике. Рано или поздно, с ростом количества этих накопленных изображений, станет сложно выискивать нужное и подходящее для данного случая;
б) вы фотограф, храните огромную базу отснятого материала, и хотите в будущем иметь возможность быстро найти любую фотографию, просто зная что на ней;
в) архив домашних фото неуклонно растёт, или уже имеет самые внушительные объёмы, а вы не представляете, как с этим управляться и опять же быстро находить нужное;
г) другие возможные похожие случаи.
Прямо в этом месте повествования предлагаю поставить задачу, которую я для примера должен буду решить. Итак, у меня есть набор изображений (из обычного сборника обоев на рабочий стол), объединённых общей тематикой - растительность.
Мои задачи (не связанные друг с другом): отобрать все фотографии где есть вода; отобрать только цветы; найти пальму.
Решать буду в самом конце, а пока рассмотрим возможные подходы к решению всего поставленного вопроса.
Путь первый: папка "Мухи", папка "Котлеты"
Привычный способ - красиво разложить всё по папочкам - вполне себе работоспособен, но при одном условии: относительно небольшое количество хранимых фотографий\изображений. Даже если речь идёт о домашних фото, которые раскладываются по годам, пусть даже по месяцам - то как быстро найти нужное, если их тысячи?
Если речь идёт об изображениях-образцах (референсах), то с превышением некоторого критического их количества приходится вставать перед выбором: либо сделать дерево папок неоправданно сложным, либо, чтобы избежать этого усложнения, смешивать фотографии по каким-нибудь общим признакам и кидать в одну папку. Но к чему тогда разделение по папкам, если оно не работает должным образом и поиск всё равно затруднён?
Давайте представим, по каким признакам можно поделить нашу растительность, взятую для примера. Начнём: трава, цветы, плоды, деревья...
Постойте-постойте. А если отлично видны и трава, и деревья? А вот лимон на столе лежит рядом с листочками папоротника (это я не придумываю, а смотрю на изображения из примера). Это складывать в "плоды" или в "траву"?
Можно и туда и туда, но это действие отдаёт некоторой невменяемостью.
Безусловно, можно выбросить эти неугодные фотографии и найти другие - "правильные", не вводящие в заблуждение. Но - лень. Как всегда.
Путь второй: метаданные, сэр
Использовать для поиска зашитые в файл теги - это отличная мысль. Всё, что требуется - просто описать при помощи тегов каждую фотографию, а именно - то что на ней изображено; при поиске же останется только написать соответствующий запрос. Таким образом, в вышеупомянутом случае, одна и та же капризная фотография будет выдана нам как при запросе "лимон", так и при запросе "папоротник". При этом, для удобства, можно оставить некоторое разделение файлов по папкам, но в сложных деревьях из папок отпадает всякая нужда.
Однако на этом хорошие новости заканчиваются. Причина - крайне скудные возможности применения этих самых тегов. Проще говоря, задумка-то хорошая, но её воплощение на сегодняшний день оставляет желать лучшего.
Хранение внутри себя тегов поддерживают исключительно jpeg-и. И jpg-и.
Стоит пересохранить jpg в любой другой вид графического файла - и теги пропадают, вместе с возможностью поиска по ним.
Что удалось дополнительно, опытным путём, выяснить лично мне:
- если пересохранить jpg в jpg через Photoshop - теги остаются;
- остаются и при пересохранении jpg в jpg через XnView (есть соответствующие галки - переносить метаданные или не переносить);
- при использовании Paint.NET то же самое пересохранение уничтожает теги.
Итак, уже есть ограничение, обязывающее нас отдавать предпочтение формату JPEG. Ничего хорошего в этом нет. Стремительно растущие объёмы запоминающих устройств, в общем-то, вполне позволяют полностью отказаться от джипегов уже сегодня - в пользу куда более современного PNG, нетяжёлого, сохраняющего прекрасную картинку и имеющего альфа-канал. Этот переход рано или поздно окончательно произойдёт. Всё, что пока удерживает JPEG на плаву - это его использование в оформлении сайтов, в силу его малого веса, и в силу того же - тысячи снимков в архивах фотографов хранятся в этом формате.
Да и не все программы, как видно, обучены с метаданными правильно работать. Обрежешь где-нибудь не в той софтине фотографию - подписывай заново. Про обработку множества файлов молчу.
Программы наподобие Picasa умеют обходить ограничение по формату: в JPEG они, как положено, прописывают метаданные, а вот при добавлении тегов к файлам других форматов они сохраняют расположение этого файла и прописанные теги в собственной, внутренней базе данных. И как следствие - стоит переместить или переименовать один из таких файлов - и теги для него (разумеется, видные только в той же Picasa) опять пропадают. Не лучшее решение.
Путь третий: вы только яхту назовите...
Как использовать все возможности, которые для поиска предоставляют теги, и в то же время обойти все накладываемые их использованием ограничения? Довольно просто: надо прописывать некое подобие тегов прямо в именах файлов.
Соль здесь в том, что если между "тегами" в имени файла поставлены разделители (точка, или земля _ пардон, нижнее подчёркивание) - то в обычное поле поиска операционной системы можно вбивать запросы, соответствующие этим "тегам", и файлы будут выдаваться по этим запросам.
Не подлежит сомнению, что для переименования всех нужных файлов придётся основательно потрудиться и потратить некоторое время. Но давайте посчитаем получаемые выгоды.
1. При сильном желании можно скидать вообще все изображения, правильно именованные таким способом, в одну-единственную папку (поностальгируем немного по папке "Мои рисунки" из Windows XP). Это, конечно, некоторый перебор - но данный способ позволяет делать это без особых опасений. Вы отправляете запрос - и получаете только нужное.
При этом, что понятно, можно сочетать именование с распределением по папкам. Это даст возможность делать поисковые запросы как зайдя в какую-нибудь подпапку, так и "над всеми" папками сразу, получая выдачу подходящих файлов отовсюду. Это очень и очень удобно.
2. Имя файла - вещь очень легко сохраняемая. Если вы как угодно обработаете файл в графическом редакторе - его имя никак не изменится. Обрабатывайте сколько хотите и чем хотите.
3. Никаких программ-посредников для поиска. Про всякого рода каталогизаторы можно забыть навсегда. Для поиска нужна лишь операционная система и встроенные в неё средства, для переименования (изменения\добавления "тегов") - программа-переименователь большого количества файлов. Более того - если файлов немного, то назвать их "тегами" можно и вручную - то есть на 100% без использования дополнительного ПО.
4. Гибкость, которая предоставляется при управлении "тегами" через именование файлов, поначалу трудно осознать целиком. Имея на руках хорошую программу-переименователь, можно удалять любые отрывки имени из любого количества файлов, так же легко добавлять любые кусочки имени в любое место, производить замены любых сочетаний знаков на любые, и т.д., и т.п. В случае с обычными тегами, которые прописываются в JPEG-ах, такие фокусы по определению невозможны.
5. Никаких ограничений на форматы файлов. Совсем никаких.
Способ годится для именования таким образом совершенно любых файлов, не только графических (главное чтобы не системных). Хоть папки так называть. Не знаю, насколько это существенно, но тем не менее - круто же?
6. Годится любая из распространённых ОСей, имеющих GUI. Windows, Mac OS, GNU Linux. (Я подразумеваю серьёзные компьютеры, а не андроиды-яблоиды и прочие игрушки.)
7. Полностью (!) соблюдается требование, предписывающее именовать фотографии осмысленно, и почти никогда никем в обычных условиях не выполняемое.
8. Вы не поверите, но возможно впервые за всё время вы внимательно (а не бегло) рассмотрите все до единого файлы изображений, которые у вас есть.
9. И как следствие - вы наконец-то начнёте принимать (первое время скрепя сердце) решения, что же вам по-настоящему из всего этого нужно.
Хотел получить для красоты семь пунктов, да не вышло. Как побочные явления можно добавить:
- если вы ещё не освоили слепую десятипальцевую печать - самое время её освоить, и во время именований файлов появится возможность отточить данный навык;
- развитие сосредоточенности, усидчивости, терпения;
- устранение боязни обрабатывать большое количество данных;
- ... (добавьте сюда что-нибудь своё).
Получилась какая-то реклама. Зато, думаю, уже ни у кого из читающих эти строки не осталось сомнений, что я предпочитаю именно этот способ. Принимать его или не принимать - личное дело каждого читающего, а я с совершенно чистой совестью принимаюсь за обещанное решение поставленной задачи. Заодно разберём, как - приблизительно - следует действовать при данном способе работы.
Подготовка
Нам понадобится следующее:
1) Подходящая операционная система, а также работающая в её среде программа-переименователь множества файлов.
В случае с Windows великолепным решением выступает программа ReNamer (страничка:
http://www.den4b.com/?x=products&product=renamer). Я пользуюсь версией 5.50, у которой до сих пор не нашёл никаких ограничений - мне её хватает для любых задач.
2) Заранее разработанный список обозначений, которые будут использованы при именовании файлов вместо тегов.
Так как я люблю изъясняться по-русски, то назову эти обозначения "ключами".
Свои ключи необходимо составлять для каждой разновидности изображений (а также в зависимости от их предназначения). Если я подписываю изображения с автомобилями, то я укажу тип кузова, марку, цвет, ракурс. Если же это фотографии людей - я укажу пол, возраст, цвет волос, во что человек одет и прочее. Если фотографии из домашнего архива - в качестве ключей могут присутствовать год съёмки, место \ событие, присутствующие на фотографиях люди и другие данные.
Необходимо также учитывать, что в файловых системах NTFS и HFS+ ограничение длины имени файла составляет 255 знаков. В NTFS (Windows) в эту длину входит и длина пути к файлу (насчёт других файловых систем не выяснял); расширение не учитывается.
[upd.] В файловых системах, используемых Линуксами, длина имени файла составляет 255 не знаков, а байт. При условии использования кодировки UTF-8 (а она и используется в современных Линуксах) это означает, что если для записи имени файла использовать только русские знаки, то предел имени - 127 знаков. Это следует учитывать, однако вплоть до сегодняшнего дня этот "низкий потолок" мною до сих пор не достигнут, несмотря на то что количество используемых мною поисковых ключей весьма велико.
Но даже если вдруг этот потолок когда-нибудь будет достигнут, есть способ ещё немного расширить доступное пространство для имени - используя вместо русских знаков схожие по начертанию латинские. Например - использовать латинскую "a", выглядящую точно так же как и русская "а". Здесь без скриптов и без соответствующей магии Линукса будет уже никуда.
Ключи
Составляю (в Блокноте) список ключей, которые буду использовать в рассматриваемом примере.
Каждый ключ указывает на содержимое фотографии\изображения. При составлении списка желательно делать для себя подробное пояснение, что именно обозначает каждый ключ, дабы избежать возможных противоречивостей.
Для одного ключа предпочитаю использовать три знака. После ключей сразу подписываю разделитель - точку, чтобы можно было забрать этот ключ прямо из списка: двойной щелчок ЛКМ и Ctrl+C \ Ctrl+X.
рст. Растительность. Просто для обозначения общей ветви файлов
трв. Трава и её разновидности
цвт. Цветок\цветы\цветки
вод. Присутствует вода в любом виде, будь то водоём или роса
снг. Снег
плд. Плод
дрв. Дерево\деревья
лст. Лист\листья, кроме травинок
грб. Гриб\грибы
лес. Лес
змл. Земля, почва
мкр. Макро - укрупнённая съёмка. Сразу уточняю, какая именно степень крупности имеется в виду: отдельный цветок \ лист \ плод является основным предметом, заполняющим кадр, и при этом имеет высокую чёткость
Список готов. Я составлял его одновременно с тем, как просматривал имеющиеся файлы. При желании или при необходимости список можно дополнять \ усложнять как только захочется.
Создаю ещё один txt-файл "Ключи (рабочий).txt", вставляю в него созданный список ключей, и сам этот файл бросаю в папку с обзываемыми файлами:
Открываю этот файл, и в самой верхней строке в нём, снова просматривая фотографии, составляю имя, которое будет общим для всех обзываемых файлов:
Сразу для всех файлов подходит только ключ "рст". Что ж, тем полезнее станет пример.
Открываю ReNamer и бросаю туда обзываемые файлы:
Необходимо удалить у файлов имеющиеся имена, а затем присвоить им всем общее имя, в нашем случае это только ключ "рст".
В ReNamer кнопка Add -> выбираю задачу Delete со следующими настройками:
Программа ругается, что новые имена получились недопустимыми и к тому же одинаковыми.
Соглашаюсь. Добавляю новую задачу Insert, вставляю туда ключ "рст" (без точки - т.к. он будет соседствовать с расширением файла), выставляю следующие настройки:
Программа снова выдаёт предупреждение об одинаковости получаемых имён. Чтобы исправить это - жму Shift+F , либо выполняю Options -> Fix conflicting new names .
Можно переименовывать. Жму Rename.
Теперь осталось пройти по оставшемуся списку ключей, применить их к тем файлам где есть соответствующее содержимое, и в конце - при желании - удалить номера со скобками, откуда получится.
Займусь этим.
На очереди ключ "трв.", для травы. Создаю рядом с обзываемыми файлами папку "трв" и бросаю туда все файлы, где была обнаружена хорошо видимая трава:
Затем беру эту папку и кидаю в ReNamer (обязательно следует перед этим удалить и предыдущие файлы, и задачи, имевшиеся там!).
Создаю задачу Insert (можно изменить её же, если она уже имеется) с такими же настройками, но ключ "трв." пишу уже с точкой, чтобы было отделение от предыдущего ключа:
Выбранная настройка Prefix в задаче Insert будет вставлять добавляемые ключи в самое начало имени.
Также обратите внимание, что порядок ключей в имени файла не имеет вообще никакого значения - файлы будут находиться в любом случае. Главное лишь, чтобы между ключами были разделители.
Можно переименовывать. Жму Rename, затем достаю файлы из папки "трв" обратно:
А далее я просто повторяю указанную последовательность действий и прохожу весь список ключей.
Конечно, если обнаружится, что для какого-то ключа подходит всего один-два файла - куда быстрее написать этот ключ в их имена вручную.
В конце концов получаю следующее:
Для красоты хочу удалить у файлов номера в скобках в конце имени. Это ни на что не повлияет, кроме длины самих имён.
Для этого в ReNamer нужны две задачи - Remove и Delete, со следующими настройками:
Кстати, наборы своих настроенных задач в ReNamer можно сохранять во вкладке Presets.
Высока вероятность, что снова получится множество одинаковых имён (в этом случае, как и прежде - Shift+F ). Однако у тех файлов, у которых номера можно убрать, они будут убраны.
Так что там с пальмой?
Вот и всё, набор именованных файлов получен. Теперь - поставленные для данного примера задачи.
1. Отобрать только снимки с водой. Жму F3, чтобы войти в поле поиска проводника Виндовс 7, и пишу "вод":
2. То же самое - для отыскания цветов и цветков. Пишу "цвт":
3. В ходе именования файлов с деревьями выяснилось, что пальм на представленных файлах нет. Убедиться можно, просмотрев файлы, выданные по запросу "дрв":
Немного про поиск файлов (на примере Windows 7)
Чтобы искать несколько ключей - просто перечислите их через пробелы. Ключи будут найдены в именах файлов только в том случае, если между ними в имени файла есть разделители.
Оператор OR позволяет искать в режиме "хотя бы одно из двух". Запрос "дрв OR плд" в нашем примере означает, что в имени искомого файла должен быть хотя бы один из этих ключей.
Оператор NOT служит для исключения указанного слова из поиска. Вместо него можно пользоваться минусом, например "-цвт".
Напоследок
Хотел бы ещё раз подчеркнуть, что самое важное при использовании данного способа - это список ключей. Ключей должно быть много, они должны никак друг с другом не пересекаться по своему смыслу. В больших списках ключей всегда необходимо следить, чтобы разные ключи не повторяли друг друга (например - "дрв." для дерева как растения, и "дрв." для дерева как материала).
Можно подытожить, ещё раз перечислив шаги работы.
1. Держать открытым список ключей, чтобы пробегаться по нему.
1.1. Можно предварительно отсмотреть обзываемые фотографии и сразу же произвести некоторые действия. Например, обрезать только до нужной области, повыкидывать лишние. Производить эти действия прямо во время просмотра позволяет, например, XnView (
http://www.xnview.com/en/).
2. Составить из ключей общее имя для всех обзываемых файлов.
3. Проходя по списку ключей, собирать подходящие для каждого ключа файлы в отдельную папку, чтобы добавлять им этот ключ всем сразу. После этого вытаскивать файлы обратно, в общую кучу.
4. После прохождения всего списка ключей - по возможности удалить из конца имён файлов номера в скобках.
На этом всё, и успехов.